diff --git a/ext/ReactantYaoBlocksExt.jl b/ext/ReactantYaoBlocksExt.jl index cc16e51be6..48e181978a 100644 --- a/ext/ReactantYaoBlocksExt.jl +++ b/ext/ReactantYaoBlocksExt.jl @@ -10,10 +10,12 @@ function YaoBlocks.mat( M = broadcast_to_size(zero(T), (2, 2)) c = cos(R.theta / 2) s = -im * sin(R.theta / 2) - M[1, 1] = c - M[2, 2] = c - M[1, 2] = s - M[2, 1] = s + @allowscalar begin + M[1, 1] = c + M[2, 2] = c + M[1, 2] = s + M[2, 1] = s + end return M end @@ -23,10 +25,12 @@ function YaoBlocks.mat( M = broadcast_to_size(zero(T), (2, 2)) c = cos(R.theta / 2) s = sin(R.theta / 2) - M[1, 1] = c - M[2, 2] = c - M[1, 2] = -s - M[2, 1] = s + @allowscalar begin + M[1, 1] = c + M[2, 2] = c + M[1, 2] = -s + M[2, 1] = s + end return M end @@ -35,8 +39,10 @@ function YaoBlocks.mat( ) where {D,T,S} M = broadcast_to_size(zero(T), (2, 2)) x = exp(im * R.theta / 2) - M[1, 1] = conj(x) - M[2, 2] = x + @allowscalar begin + M[1, 1] = conj(x) + M[2, 2] = x + end return M end diff --git a/perf/vqe/Circuit.jl b/perf/vqe/Circuit.jl new file mode 100644 index 0000000000..47981701be --- /dev/null +++ b/perf/vqe/Circuit.jl @@ -0,0 +1,132 @@ +using Tangles +using Networks +using LinearAlgebra +using YaoBlocks +using DelegatorTraits +import DelegatorTraits: DelegatorTrait + +@kwdef struct Circuit <: Tangles.AbstractTensorNetwork + tn::Tangles.GenericTensorNetwork + last_t::Dict{Site,Int} = Dict{Site,Int}() +end + +DelegatorTrait(::Networks.Network, ::Circuit) = DelegateToField{:tn}() +DelegatorTrait(::Networks.Taggable, ::Circuit) = DelegateToField{:tn}() +DelegatorTrait(::Tangles.TensorNetwork, ::Circuit) = DelegateToField{:tn}() +DelegatorTrait(::Tangles.Pluggable, ::Circuit) = DelegateToField{:tn}() +DelegatorTrait(::Tangles.Lattice, ::Circuit) = DelegateToField{:tn}() + +Base.copy(circ::Circuit) = Circuit(copy(circ.tn), Dict{Site,Int}()) + +function flatten_circuit(x) + if any(i -> i isa ChainBlock, subblocks(x)) + flatten_circuit(YaoBlocks.Optimise.eliminate_nested(x)) + else + x + end +end + +struct LaneAt{S} + site::S + t::Int +end + +function Base.show(io::IO, lane::LaneAt) + print(io, lane.site) + return print(io, "@$(lane.t)") +end + +moment(circuit::Circuit, site::Site) = circuit.last_t[site] + +""" + Convert a Yao circuit to a Circuit. +""" +function Base.convert(::Type{Circuit}, yaocirc::AbstractBlock) + tn = GenericTensorNetwork() + circuit = Circuit(tn, Dict{Site,Int}()) + + for gate in flatten_circuit(yaocirc) + # if gate isa Swap + # (a, b) = occupied_locs(gate) + # wire[a], wire[b] = wire[b], wire[a] + # continue + # end + + gatesites = CartesianSite.(occupied_locs(gate)) + gateinds = Index.([Plug.(gatesites)..., Plug.(gatesites; isdual=true)...]) + + # NOTE `YaoBlocks.mat` on m-site qubits still returns the operator on the full Hilbert space + m = length(occupied_locs(gate)) + operator = if gate isa YaoBlocks.ControlBlock + control((1:(m - 1))..., m => content(gate))(m) + else + content(gate) + end + + array = reshape(collect(mat(operator)), fill(nlevel(operator), length(gateinds))...) + + addtensor!(circuit, Tensor(array, gateinds)) + end + + return circuit +end + +function Tangles.addtensor!(circuit::Circuit, tensor::Tensor) + target_plugs = plugs(tensor) + target_plugs_in = filter(isdual, target_plugs) + target_plugs_out = filter(!isdual, target_plugs) + target_sites = unique!(site.(target_plugs)) + + # if lane is not present, add an identity gate + for plug in adjoint.(target_plugs_in) + if !hasplug(circuit, plug) + input, out = Index(LaneAt(site(plug), 1)), Index(LaneAt(site(plug), 2)) + addtensor!(circuit.tn, Tensor([1 0; 0 1], [input, out])) + setplug!(circuit, input, plug') + setplug!(circuit, out, plug) + circuit.last_t[site(plug)] = 2 + end + end + + # align gate tensor with the circuit + tensor = replace( + tensor, + [ + Index(plug) => Index(LaneAt(site(plug), moment(circuit, site(plug)))) for + plug in target_plugs_in + ]..., + [ + Index(plug) => Index(LaneAt(site(plug), moment(circuit, site(plug)) + 1)) for + plug in target_plugs_out + ]..., + ) + + addtensor!(circuit.tn, tensor) + + # update plug tags mapping + for plug in target_plugs_out + unsetplug!(circuit, plug) + setplug!(circuit, Index(LaneAt(site(plug), moment(circuit, site(plug)) + 1)), plug) + end + + # update the last_t for each site + for site in target_sites + circuit.last_t[site] = circuit.last_t[site] + 1 + end + + return circuit +end + +""" + Create an observable type Circuit. +""" +function create_observable(N) + observable = chain(N, [put(i => Z) for i in 1:N]...) # Observable to measure: Z gate on each qubit + + # convert observable to circuit + observable = convert(Circuit, observable) + for tensor in tensors(observable) + replace!(observable, tensor => Tensor(real(collect(parent(tensor))), inds(tensor))) + end + return observable +end diff --git a/perf/vqe/Project.toml b/perf/vqe/Project.toml new file mode 100644 index 0000000000..83848c5201 --- /dev/null +++ b/perf/vqe/Project.toml @@ -0,0 +1,30 @@ +[deps] +Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" +DelegatorTraits = "d83dbd90-3e00-4b33-84f1-398adcf3b35e" +EinExprs = "b1794770-133b-4de1-afb4-526377e9f4c5" +Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Metis = "2679e427-3c69-5b7f-982b-ece356f1e94b" +Muscle = "21fe5c4b-a943-414d-bf3e-516f24900631" +Networks = "634dcf3f-6aa7-47ba-9e85-1fb329c9ebfe" +PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +Tangles = "d2150e0e-da4c-4196-bcf0-8e0aeaf6db16" +Tenet = "85d41934-b9cd-44e1-8730-56d86f15f3ec" +Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" +YaoBlocks = "418bc28f-b43b-5e0b-a6e7-61bbc1a2c1df" + +# Reactant fixed to 0.2.138 due to a bug in rev diff rule of stablehlo.dynamic_update_slice +# [sources] +# Reactant = {path = "../../"} + +[compat] +EinExprs = "0.6.10" +Enzyme = "0.13.51" +Muscle = "0.3.14" +Reactant = "=0.2.138" +Tenet = "0.10.0" +YaoBlocks = "0.13.15" diff --git a/perf/vqe/README.md b/perf/vqe/README.md new file mode 100644 index 0000000000..c18683e429 --- /dev/null +++ b/perf/vqe/README.md @@ -0,0 +1,18 @@ +# Variational Quantum Eigensolver (VQE) + +A simple VQE training through exact tensor network contraction and backpropagation. +Because it uses exact tensor network contraction, it cannot scale to large number of layers but it should be able to scale to mid-range number of qubits (around 50) and shallow circuits. + +It uses a "Efficient SU(2)" circuit ansatz for the VQE. + +## Setup + +Tenet.jl and Tangles.jl are not registered in the General registry of packages. +You need to add the Quantic registry of packages for Julia to find them: + +```julia +]registry add https://github.com/bsc-quantic/Registry.git +``` + +> [!WARNING] +> Reactant.jl version is fixed to 0.2.138 due to a bug with the rev diff rule of `stablehlo.dynamic_update_slice` diff --git a/perf/vqe/hamiltonian-terms-n20.txt b/perf/vqe/hamiltonian-terms-n20.txt new file mode 100644 index 0000000000..10437c7292 --- /dev/null +++ b/perf/vqe/hamiltonian-terms-n20.txt @@ -0,0 +1,128 @@ +-20.02329899902102 [X0 Y1 X8 Z9 Z10 Z11 Z12 Z13 Z14 Y15] +0.10767345306547756 [] +8.80734867719193e-5 [X0 Y1 X2 Y3] +-0.00031909186414867024 [X0 Y1 Y12 Z13 Z14 Z15 Z16 Z17 Z18 X19] +0.0004996872413672634 [X0 Y1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 X12] +0.016657629396396256 [X0 X1 X8 Z9 Z10 Z11 Z12 Z13 Z14 X15] +-2.509112878277348e-5 [X0 X1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18] +-7.526057730086852e-5 [X0 Y1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Y12] +0.00016804175381690398 [X0 Z1 X2 X5 Z6 Z7 Z8 Z9 Z10 X11] +-3.2989480400377e-5 [X0 X1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Y17] +-4.2292656360584896e-5 [X0 Z1 X2 Y7 Z8 Y9] +0.00019801033544939237 [X0 Z1 X2 X7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 X17] +0.00012335352619074634 [X0 Y1 Y15 X16] +-0.00031653544691587204 [X0 X1 Y14 Y15] +0.0004572073593218358 [X0 Y1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 X12] +0.02768448501770293 [X0 X1 Y9 Z10 Z11 Z12 Z13 Y14] +-0.0009252706068446522 [X0 Y1 X6 Y7] +0.0049072637209679314 [X0 Y1 X13 Z14 Z15 Z16 Z17 Y18] +0.12811100236340767 [X0 X1 X6 X7] +-0.0010270313650730257 [X0 X1 X14 X15] +0.0027427495558326985 [X0 Y1 Y16 X17] +-0.0013614634317282404 [X0 X1 Y6 Y7] +0.0010176818550736016 [X0 Z1 X2 X7 Z8 X9] +-0.0003828743465888113 [X0 X1 Y12 Y13] +0.0032512111489067467 [X0 X1 Y18 Y19] +0.08411434541978045 [X0 X1 Y14 Z15 Z16 Y17] +0.05855039299635987 [X0 Z1 X2 Y4 Z5 Z6 Z7 Z8 Z9 Y10] +0.09095271633361096 [X0 X1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19] +-0.001343764804653726 [X0 Z1 X2 Y7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Y17] +-0.001784854131285513 [X0 Y1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19] +0.06648285866273813 [X0 X1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13] +-0.002471090646759579 [X0 X1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18] +-0.002646396087864506 [X0 X1 X4 X5] +-0.0006516063459811195 [X0 Y1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 X17] +-0.0007257668661868602 [X0 Z1 X2 Y6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Y16] +-0.00022707152770222623 [X0 Y1 Y14 X15] +-0.0012325380495824597 [X0 Y1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13] +0.06331251922594161 [X0 Z1 X2 Y6 Z7 Y8] +0.028867052831104578 [X0 X1 Y2 Z3 Z4 Y5] +0.06542879037731869 [X0 X1 X8 X9] +-0.00014533380020575353 [X0 X1 Y13 Z14 Z15 Z16 Z17 Y18] +0.07232772561954542 [X0 X1 X14 Z15 Z16 X17] +-1.4357805341064722e-5 [X0 X1 X10 X11] +-0.00013807133519685261 [X0 Y1 X9 Z10 Z11 Z12 Z13 Z14 Z15 Y16] +-0.0005050059022825259 [X0 X1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19] +0.06137357140003864 [X0 X1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13] +0.0034881204936011937 [X0 Y1 Y4 X5] +0.029955230601382776 [X0 Y1 X14 Z15 Z16 Y17] +0.014847441760803421 [X0 Y1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18] +0.002125311725514915 [X0 Z1 X2 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 X11] +0.001564691392240837 [X0 Y1 X15 Y16] +0.019178836293542154 [X0 Y1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13] +0.02542595818030917 [X0 Z1 X2 X6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 X16] +0.010018665280409095 [X0 X1 Y16 Y17] +0.05703094103843582 [X0 Z1 X2 X6 Z7 X8] +0.022700074315972207 [X0 X1 Y10 Y11] +2.7688129380049205e-5 [X0 Y1 Y6 X7] +-9.886346204475988e-5 [X0 X1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19] +0.00039034474838729196 [X0 X1 Y3 Y4] +-0.0277167485222872 [X0 X1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19] +6.242787825755139e-6 [X0 X1 X18 X19] +0.0002855444044645041 [X0 Y1 Y2 Z3 Z4 X5] +-0.0001040459934573164 [X0 X1 Y12 Z13 Z14 Z15 Z16 Z17 Z18 Y19] +-9.000790603273486e-5 [X0 Y1 X4 Y5] +0.00022974417125316116 [X0 X1 X13 Z14 Z15 Z16 Z17 X18] +-0.00014812821038365177 [X0 X1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 Y15] +-2.0221779377688277e-5 [X0 Y1 X12 Z13 Z14 Z15 Z16 Z17 Z18 Y19] +-5.1452044053781085e-5 [X0 Y1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13] +7.86548453763452e-5 [X0 X1 X2 Z3 Z4 X5] +0.13540765122361054 [X0 Z1 X2 X10 Z11 X12] +-0.001179016832287718 [X0 Y1 Y8 X9] +0.007367320617259539 [X0 X1 X12 Z13 Z14 Z15 Z16 Z17 Z18 X19] +-0.07350243538294754 [X0 X1 X9 Z10 Z11 Z12 Z13 X14] +0.0012763873888146974 [X0 X1 Y4 Y5] +-0.0024253471132371623 [X0 X1 Y9 Z10 Z11 Z12 Z13 Z14 Z15 Y16] +0.0004825269432643367 [X0 Y1 Y9 Z10 Z11 Z12 Z13 Z14 Z15 X16] +-0.003339862159534003 [X0 Y1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19] +-6.280756169407885e-5 [X0 X1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 X12] +0.008304253322401048 [X0 Y1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13] +0.04417469435125109 [X0 Y1 Y9 Z10 Z11 Z12 Z13 X14] +-0.04542961161142746 [X0 Y1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 X15] +0.00889488443332749 [X0 X1 X12 X13] +-0.0021101166617534307 [X0 Y1 Y12 X13] +-0.0016956381013258253 [X0 Z1 X2 X6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 X14] +-0.0654742474046646 [X0 Y1 Y13 Z14 Z15 Z16 Z17 X18] +0.0031562305123940793 [X0 Z1 X2 Y7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Y15] +0.00187745121935422 [X0 Y1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19] +0.0002771421459178943 [X0 X1 Y2 Y3] +0.0007977013979872697 [X0 Y1 Y14 Z15 Z16 X17] +-0.0009970033920598462 [X0 Y1 X8 Y9] +-0.001556263334000379 [X0 Z1 X2 X4 Z5 Z6 Z7 Z8 Z9 X10] +0.08169718548652216 [X0 Y1 Y18 X19] +-0.0602534590081775 [X0 X1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 Y12] +0.05894421697511449 [X0 Y1 X16 Y17] +-0.00010671533930654679 [X0 Y1 X18 Y19] +-0.09636936857412182 [X0 Y1 Y10 X11] +0.0003218263773590805 [X0 X1 X5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18] +0.0001883154879879538 [X0 X1 X8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 X17] +-0.0002071683425504752 [X0 X1 X16 X17] +0.008552681875402257 [X0 Y1 X2 Z3 Z4 Y5] +0.010430073279025544 [X0 X1 X9 Z10 Z11 Z12 Z13 Z14 Z15 X16] +-0.005621787748994994 [X0 X1 X15 X16] +-0.014632424919220887 [X0 Y1 X5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18] +-0.003438351538167895 [X0 Z1 X2 X7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 X15] +0.0015260649862089606 [X0 X1 X2 X3] +0.036188529251918955 [X0 Z1 X2 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Y11] +-0.10295717032794717 [X0 X1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Y12] +0.01258641195127333 [X0 X1 X5 Z6 Z7 Z8 Z9 Z10 Z11 X12] +-0.07944403824155766 [X0 Z1 X2 Y6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Y14] +5.092602816399091e-5 [X0 Y1 X14 Y15] +5.524983047072962e-5 [X0 Y1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18] +9.072130446166333e-5 [X0 X1 Y8 Y9] +-3.958328345307478e-5 [X0 Y1 X10 Y11] +-9.92325667558302e-7 [X0 X1 X3 X4] +-3.716513732689877e-7 [X0 Y1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19] +9.169893538395603e-6 [X0 X1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18] +-5.356347396773038e-6 [X0 X1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13] +2.0502317101097673e-6 [X0 Y1 X5 Z6 Z7 Z8 Z9 Z10 Z11 Y12] +-0.0023500087935177803 [X0 X1 Y15 Y16] +3.755602289555965e-5 [X0 Y1 X3 Y4] +-4.860586735184505e-5 [X0 X1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13] +-0.0012573532197818287 [X0 Y1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18] +9.063813115828972e-6 [X0 Y1 X8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Y17] +-2.6142212088227807e-5 [X0 Y1 Y3 X4] +-0.0011022929384773205 [X0 Y1 Y2 X3] +1.6494258663913302e-5 [X0 Y1 X9 Z10 Z11 Z12 Z13 Y14] +-9.597455750374637e-6 [X0 Y1 X12 Y13] +0.00015234277868995082 [X0 Z1 X2 Y5 Z6 Z7 Z8 Z9 Z10 Y11] \ No newline at end of file diff --git a/perf/vqe/hamiltonian-terms-n30.txt b/perf/vqe/hamiltonian-terms-n30.txt new file mode 100644 index 0000000000..ef5c34e7b3 --- /dev/null +++ b/perf/vqe/hamiltonian-terms-n30.txt @@ -0,0 +1,128 @@ +0.000123456789012345 [X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29] +-0.000234567890123456 [Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 Y18 Y19 Y20 Y21 Y22 Y23 Y24 Y25 Y26 Y27 Y28 Y29] +0.000345678901234567 [Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Z19 Z20 Z21 Z22 Z23 Z24 Z25 Z26 Z27 Z28 Z29] +-0.000456789012345678 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 X29] +0.00056789012345689 [] +-0.0006789012345678901 [Z0 X1 Y2 Z3 X4 Y5 Z6 X7 Y8 Z9 X10 Y11 Z12 X13 Y14 Z15 X16 Y17 Z18 X19 Y20 Z21 X22 Y23 Z24 X25 Y26 Z27 X28 Y29] +0.0007890123456789012 [X0 X5 Y10 Z15 X20 Y25 Z29] +-0.0008901234567890123 [X7] +0.0009012345678901234 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29] +-0.0010123456789012345 [X0 Y1 X2 Y3 X4 Y5 X6 Y7 X8 Y9 X10 Y11 X12 Y13 X14 Y15 X16 Y17 X18 Y19 X20 Y21 X22 Y23 X24 Y25 X26 Y27 X28 Y29] +0.001123456789012345 [Z1 X2 Y3 Z4 X5 Y6 Z7 X8 Y9 Z10 X11 Y12 Z13 X14 Y15 Z16 X17 Y18 Z19 X20 Y21 Z22 X23 Y24 Z25 X26 Y27 Z28 X29] +-0.001234567890123456 [Y0 Z2 X4 Y6 Z8 X10 Y12 Z14 X16 Y18 Z20 X22 Y24 Z26 X28 Y29] +0.001345678901234567 [X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27 Z29] +-0.001456789012345678 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28] +0.001567890123456789 [Y1 Z3 X5 Y7 Z9 X11 Y13 Z15 X17 Y19 Z21 X23 Y25 Z27 X29] +-0.0016789012345678901 [X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24 Y26 Z28] +0.0017890123456789012 [Z1 X3 Y5 Z7 X9 Y11 Z13 X15 Y17 Z19 X21 Y23 Z25 X27 Y29] +-0.0018901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Z22 Y24 X26 Z28] +0.0019012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0020123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.002123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.002234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 X26 X28] +0.002345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 X27 X29] +-0.002456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 Y28] +0.002567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 X27 X29] +-0.0026789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Y28] +0.0027890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0028901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0029012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0030123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.003123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.003234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.003345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.003456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.003567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0036789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0037890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0038901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0039012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0040123456789012345 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.004123456789012345 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.004234567890123456 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.004345678901234567 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.004456789012345678 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.004567890123456789 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0046789012345678901 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0047890123456789012 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0048901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0049012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0050123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.005123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.005234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.005345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.005456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.005567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0056789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0057890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0058901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0059012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0060123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.006123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.006234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.006345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.006456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.006567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0066789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0067890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0068901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0069012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0070123456789012345 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.007123456789012345 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.007234567890123456 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.007345678901234567 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.007456789012345678 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.007567890123456789 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0076789012345678901 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0077890123456789012 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0078901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0079012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0080123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.008123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.008234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.008345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.008456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.008567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0086789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0087890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0088901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0089012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0090123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.009123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.009234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.009345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.009456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.009567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0096789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0097890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0098901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0099012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0100123456789012345 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 Z29] +0.010123456789012345 [Y0 X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10 X11 Y12 X13 Y14 X15 Y16 X17 Y18 X19 Y20 X21 Y22 X23 Y24 X25 Y26 X27 X28 X29] +-0.010234567890123456 [Z0 X1 Y2 Z3 X4 Y5 Z6 X7 Y8 Z9 X10 Y11 Z12 X13 Y14 Z15 X16 Y17 Z18 X19 Y20 Z21 X22 Y23 Z24 X25 Y26 Z27 X28 Z29] +0.010345678901234567 [X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +-0.010456789012345678 [Y0 Z3 X6 Y9 Z12 X15 Y18 Z21 X24 Y27 Z29 X1 Y4 Z7 X10 Y13 Z16 X19 Y22 Z25 X28 Y2 Z5 X8 Y11 Z14 X17 Y20] +0.010567890123456789 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25] +-0.0106789012345678901 [X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0107890123456789012 [Z1 X3 Y5 Z7 X9 Y11 Z13 X15 Y17 Z19 X21 Y23 Z25 X27 Y29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24] +-0.0108901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 X25] +0.0109012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24] +-0.0110123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 X27] +0.011123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 X24] +-0.011234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 X27] +0.011345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 X24] +-0.011456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Y25] +0.011567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 Y24] +-0.0116789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0117890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Y24] +-0.0118901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0119012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24] +-0.0120123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25] +0.012123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 Z24] +-0.012234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Z27] +0.012345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24] +-0.012456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Z27] +0.012567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Y24] +-0.0126789012345678901 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 Y29] +0.0127890123456789012 [Y0 Z3 X6 Y9 Z12 X15 Y18 Z21 X24 Y27 X29] +-0.0128901234567890123 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Y29] \ No newline at end of file diff --git a/perf/vqe/hamiltonian-terms-n40.txt b/perf/vqe/hamiltonian-terms-n40.txt new file mode 100644 index 0000000000..ef5c34e7b3 --- /dev/null +++ b/perf/vqe/hamiltonian-terms-n40.txt @@ -0,0 +1,128 @@ +0.000123456789012345 [X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29] +-0.000234567890123456 [Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 Y18 Y19 Y20 Y21 Y22 Y23 Y24 Y25 Y26 Y27 Y28 Y29] +0.000345678901234567 [Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Z19 Z20 Z21 Z22 Z23 Z24 Z25 Z26 Z27 Z28 Z29] +-0.000456789012345678 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 X29] +0.00056789012345689 [] +-0.0006789012345678901 [Z0 X1 Y2 Z3 X4 Y5 Z6 X7 Y8 Z9 X10 Y11 Z12 X13 Y14 Z15 X16 Y17 Z18 X19 Y20 Z21 X22 Y23 Z24 X25 Y26 Z27 X28 Y29] +0.0007890123456789012 [X0 X5 Y10 Z15 X20 Y25 Z29] +-0.0008901234567890123 [X7] +0.0009012345678901234 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29] +-0.0010123456789012345 [X0 Y1 X2 Y3 X4 Y5 X6 Y7 X8 Y9 X10 Y11 X12 Y13 X14 Y15 X16 Y17 X18 Y19 X20 Y21 X22 Y23 X24 Y25 X26 Y27 X28 Y29] +0.001123456789012345 [Z1 X2 Y3 Z4 X5 Y6 Z7 X8 Y9 Z10 X11 Y12 Z13 X14 Y15 Z16 X17 Y18 Z19 X20 Y21 Z22 X23 Y24 Z25 X26 Y27 Z28 X29] +-0.001234567890123456 [Y0 Z2 X4 Y6 Z8 X10 Y12 Z14 X16 Y18 Z20 X22 Y24 Z26 X28 Y29] +0.001345678901234567 [X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27 Z29] +-0.001456789012345678 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28] +0.001567890123456789 [Y1 Z3 X5 Y7 Z9 X11 Y13 Z15 X17 Y19 Z21 X23 Y25 Z27 X29] +-0.0016789012345678901 [X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24 Y26 Z28] +0.0017890123456789012 [Z1 X3 Y5 Z7 X9 Y11 Z13 X15 Y17 Z19 X21 Y23 Z25 X27 Y29] +-0.0018901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Z22 Y24 X26 Z28] +0.0019012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0020123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.002123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.002234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 X26 X28] +0.002345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 X27 X29] +-0.002456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 Y28] +0.002567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 X27 X29] +-0.0026789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Y28] +0.0027890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0028901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0029012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0030123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.003123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.003234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.003345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.003456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.003567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0036789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0037890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0038901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0039012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0040123456789012345 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.004123456789012345 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.004234567890123456 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.004345678901234567 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.004456789012345678 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.004567890123456789 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0046789012345678901 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0047890123456789012 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0048901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0049012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0050123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.005123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.005234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.005345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.005456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.005567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0056789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0057890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0058901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0059012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0060123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.006123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.006234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.006345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.006456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.006567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0066789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0067890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0068901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0069012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0070123456789012345 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.007123456789012345 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.007234567890123456 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.007345678901234567 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.007456789012345678 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.007567890123456789 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0076789012345678901 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0077890123456789012 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0078901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0079012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0080123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.008123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.008234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.008345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.008456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.008567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0086789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0087890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0088901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0089012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0090123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.009123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.009234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.009345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.009456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.009567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0096789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0097890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0098901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0099012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0100123456789012345 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 Z29] +0.010123456789012345 [Y0 X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10 X11 Y12 X13 Y14 X15 Y16 X17 Y18 X19 Y20 X21 Y22 X23 Y24 X25 Y26 X27 X28 X29] +-0.010234567890123456 [Z0 X1 Y2 Z3 X4 Y5 Z6 X7 Y8 Z9 X10 Y11 Z12 X13 Y14 Z15 X16 Y17 Z18 X19 Y20 Z21 X22 Y23 Z24 X25 Y26 Z27 X28 Z29] +0.010345678901234567 [X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +-0.010456789012345678 [Y0 Z3 X6 Y9 Z12 X15 Y18 Z21 X24 Y27 Z29 X1 Y4 Z7 X10 Y13 Z16 X19 Y22 Z25 X28 Y2 Z5 X8 Y11 Z14 X17 Y20] +0.010567890123456789 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25] +-0.0106789012345678901 [X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0107890123456789012 [Z1 X3 Y5 Z7 X9 Y11 Z13 X15 Y17 Z19 X21 Y23 Z25 X27 Y29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24] +-0.0108901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 X25] +0.0109012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24] +-0.0110123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 X27] +0.011123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 X24] +-0.011234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 X27] +0.011345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 X24] +-0.011456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Y25] +0.011567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 Y24] +-0.0116789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0117890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Y24] +-0.0118901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0119012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24] +-0.0120123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25] +0.012123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 Z24] +-0.012234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Z27] +0.012345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24] +-0.012456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Z27] +0.012567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Y24] +-0.0126789012345678901 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 Y29] +0.0127890123456789012 [Y0 Z3 X6 Y9 Z12 X15 Y18 Z21 X24 Y27 X29] +-0.0128901234567890123 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Y29] \ No newline at end of file diff --git a/perf/vqe/hamiltonian-terms-n50.txt b/perf/vqe/hamiltonian-terms-n50.txt new file mode 100644 index 0000000000..ef5c34e7b3 --- /dev/null +++ b/perf/vqe/hamiltonian-terms-n50.txt @@ -0,0 +1,128 @@ +0.000123456789012345 [X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29] +-0.000234567890123456 [Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 Y18 Y19 Y20 Y21 Y22 Y23 Y24 Y25 Y26 Y27 Y28 Y29] +0.000345678901234567 [Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Z19 Z20 Z21 Z22 Z23 Z24 Z25 Z26 Z27 Z28 Z29] +-0.000456789012345678 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 X29] +0.00056789012345689 [] +-0.0006789012345678901 [Z0 X1 Y2 Z3 X4 Y5 Z6 X7 Y8 Z9 X10 Y11 Z12 X13 Y14 Z15 X16 Y17 Z18 X19 Y20 Z21 X22 Y23 Z24 X25 Y26 Z27 X28 Y29] +0.0007890123456789012 [X0 X5 Y10 Z15 X20 Y25 Z29] +-0.0008901234567890123 [X7] +0.0009012345678901234 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29] +-0.0010123456789012345 [X0 Y1 X2 Y3 X4 Y5 X6 Y7 X8 Y9 X10 Y11 X12 Y13 X14 Y15 X16 Y17 X18 Y19 X20 Y21 X22 Y23 X24 Y25 X26 Y27 X28 Y29] +0.001123456789012345 [Z1 X2 Y3 Z4 X5 Y6 Z7 X8 Y9 Z10 X11 Y12 Z13 X14 Y15 Z16 X17 Y18 Z19 X20 Y21 Z22 X23 Y24 Z25 X26 Y27 Z28 X29] +-0.001234567890123456 [Y0 Z2 X4 Y6 Z8 X10 Y12 Z14 X16 Y18 Z20 X22 Y24 Z26 X28 Y29] +0.001345678901234567 [X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27 Z29] +-0.001456789012345678 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28] +0.001567890123456789 [Y1 Z3 X5 Y7 Z9 X11 Y13 Z15 X17 Y19 Z21 X23 Y25 Z27 X29] +-0.0016789012345678901 [X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24 Y26 Z28] +0.0017890123456789012 [Z1 X3 Y5 Z7 X9 Y11 Z13 X15 Y17 Z19 X21 Y23 Z25 X27 Y29] +-0.0018901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Z22 Y24 X26 Z28] +0.0019012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0020123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.002123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.002234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 X26 X28] +0.002345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 X27 X29] +-0.002456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 Y28] +0.002567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 X27 X29] +-0.0026789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Y28] +0.0027890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0028901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0029012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0030123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.003123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.003234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.003345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.003456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.003567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0036789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0037890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0038901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0039012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0040123456789012345 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.004123456789012345 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.004234567890123456 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.004345678901234567 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.004456789012345678 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.004567890123456789 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0046789012345678901 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0047890123456789012 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0048901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0049012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0050123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.005123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.005234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.005345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.005456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.005567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0056789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0057890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0058901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0059012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0060123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.006123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.006234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.006345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.006456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.006567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0066789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0067890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0068901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0069012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0070123456789012345 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.007123456789012345 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.007234567890123456 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.007345678901234567 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.007456789012345678 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.007567890123456789 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0076789012345678901 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0077890123456789012 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0078901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0079012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0080123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.008123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.008234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.008345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.008456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.008567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0086789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0087890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0088901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.0089012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0090123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.009123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.009234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.009345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.009456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28] +0.009567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29] +-0.0096789012345678901 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28] +0.0097890123456789012 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29] +-0.0098901234567890123 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28] +0.0099012345678901234 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29] +-0.0100123456789012345 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 Z29] +0.010123456789012345 [Y0 X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10 X11 Y12 X13 Y14 X15 Y16 X17 Y18 X19 Y20 X21 Y22 X23 Y24 X25 Y26 X27 X28 X29] +-0.010234567890123456 [Z0 X1 Y2 Z3 X4 Y5 Z6 X7 Y8 Z9 X10 Y11 Z12 X13 Y14 Z15 X16 Y17 Z18 X19 Y20 Z21 X22 Y23 Z24 X25 Y26 Z27 X28 Z29] +0.010345678901234567 [X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +-0.010456789012345678 [Y0 Z3 X6 Y9 Z12 X15 Y18 Z21 X24 Y27 Z29 X1 Y4 Z7 X10 Y13 Z16 X19 Y22 Z25 X28 Y2 Z5 X8 Y11 Z14 X17 Y20] +0.010567890123456789 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Z29 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25] +-0.0106789012345678901 [X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0107890123456789012 [Z1 X3 Y5 Z7 X9 Y11 Z13 X15 Y17 Z19 X21 Y23 Z25 X27 Y29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24] +-0.0108901234567890123 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 X25] +0.0109012345678901234 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 X24] +-0.0110123456789012345 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 X27] +0.011123456789012345 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 X24] +-0.011234567890123456 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 X27] +0.011345678901234567 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 X24] +-0.011456789012345678 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Y25] +0.011567890123456789 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 Y24] +-0.0116789012345678901 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0117890123456789012 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Y24] +-0.0118901234567890123 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Y27] +0.0119012345678901234 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24] +-0.0120123456789012345 [Y0 X2 Z4 Y6 X8 Z10 Y12 X14 Z16 Y18 X20 Y22 X24 Y26 X28 X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25] +0.012123456789012345 [X1 Z3 Y5 X7 Z9 Y11 X13 Z15 Y17 Z19 Y21 X23 Z25 Y27 X29 X0 Y2 Z4 X6 Y8 Z10 X12 Y14 Z16 X18 Y20 Z22 Z24] +-0.012234567890123456 [Z0 Y2 X4 Z6 Y8 X10 Z12 Y14 X16 Z18 Y20 Z22 Y24 X26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Z27] +0.012345678901234567 [Y1 X3 Z5 Y7 X9 Z11 Y13 X15 Z17 Y19 X21 Z23 Y25 X27 Z29 X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24] +-0.012456789012345678 [X0 Z2 Y4 X6 Z8 Y10 X12 Z14 Y16 Z18 Y20 X22 Z24 Y26 Z28 X1 Y3 Z5 X7 Y9 Z11 X13 Y15 Z17 X19 Y21 Z23 X25 Z27] +0.012567890123456789 [Z1 Y3 X5 Z7 Y9 X11 Z13 Y15 X17 Z19 Y21 X23 Z25 Y27 X29 X0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Y24] +-0.0126789012345678901 [X0 Y1 Z2 X3 Y4 Z5 X6 Y7 Z8 X9 Y10 Z11 X12 Y13 Z14 X15 Y16 Z17 X18 Y19 Z20 X21 Y22 Z23 X24 Y25 Z26 X27 Y28 Y29] +0.0127890123456789012 [Y0 Z3 X6 Y9 Z12 X15 Y18 Z21 X24 Y27 X29] +-0.0128901234567890123 [Z0 X2 Y4 Z6 X8 Y10 Z12 X14 Y16 Z18 X20 Y22 Z24 X26 Y28 Y29] \ No newline at end of file diff --git a/perf/vqe/main.jl b/perf/vqe/main.jl new file mode 100644 index 0000000000..569c1dae9c --- /dev/null +++ b/perf/vqe/main.jl @@ -0,0 +1,210 @@ +using YaoBlocks +using Adapt +using Reactant +using Enzyme +using Tangles +using Tenet +using EinExprs +using CliqueTrees +using BenchmarkTools +using Statistics +using PrettyTables +using Unitful +using Logging + +include("utils.jl") +include("Circuit.jl") + +dbg_logger = ConsoleLogger(stderr, Logging.Info) + +# number of qubits +N = 50 + +# number of layers +L = 6 + +# generate parametric circuit +ansatz = efficient_su2(N, L) +params_re = adapt(ConcreteRArray, rand(Float64, nparameters(ansatz)) .* 2π) + +@info "Reading hamiltonian terms from file \"hamiltonian-terms-n$N.txt\"" + +hamiltonian_terms = open(joinpath(@__DIR__, "hamiltonian-terms-n$N.txt")) do io + map(eachline(io)) do line + matched = match(r"([-]*[0-9]+.[0-9]+[e\-0-9]*) \[([A-Z0-9 ]*)\]", line) + if isnothing(matched) + throw(ErrorException("Invalid line format: $line")) + end + + weight, term_str = matched.captures + + term::Vector{AbstractBlock{2}} = + map(eachmatch(r"([XYZ])([0-9]+)", term_str)) do m + qid = parse(Int, m[2]) + 1 + + if m[1] == "X" + put(N, qid => X) + elseif m[1] == "Y" + put(N, qid => Y) + elseif m[1] == "Z" + put(N, qid => Z) + else + throw(ErrorException("Unsupported operator: $(m[1])")) + end + end + + _arrays = [collect(ComplexF64, I(2)) for _ in 1:N] + for gate in term + _arrays[only(occupied_locs(gate))] = reshape(collect(mat(content(gate))), 2, 2) + end + observable = ProductOperator(_arrays) + + (; weight=parse(Float64, weight), term, observable) + end +end; +@show numterms = length(hamiltonian_terms) + +# we are just taking one term, but terms can be batched together (just technically more difficult to describe from the Julia / Tensor Network side) +function expectation(params, obs, coef) + @allowscalar subscirc = dispatch(ansatz, params) + + ket = Product(fill([1, 0], N)) + U = @allowscalar convert(Circuit, subscirc) # TODO add `@allowscalar` to Reactant/ext/ReactantYaoBlocksExt.jl:23 + obs = copy(obs) + U_dagger = adjoint(U) + bra = adjoint(ket) + + tn = generic_stack(ket, U, obs, U_dagger, bra) + + # print path flops and max rank to consistenly check that the same contraction path is used + # (exponentially big changes can be seen if not) + path = einexpr(tn; optimizer=Greedy()) + @info "Contraction path" max_rank = maximum(ndims, Branches(path)) total_flops = mapreduce( + EinExprs.flops, +, Branches(path) + ) + res = contract(tn; path) + return real(coef * res[]) # ⟨ψ|U† O U|ψ⟩ +end + +Reactant.@skip_rewrite_func expectation +Reactant.@skip_rewrite_func Tangles.resetinds! +Reactant.@skip_rewrite_func Tangles.align! +Reactant.@skip_rewrite_func Tangles.contract +Reactant.@skip_rewrite_func EinExprs.einexpr + +function ∇expectation(params, obs, coef) + @allowscalar foo = Enzyme.gradient( + ReverseWithPrimal, expectation, params, Enzyme.Const(obs), Enzyme.Const(coef) + ) + return foo.val, foo.derivs[1] +end + +Reactant.@skip_rewrite_func ∇expectation + +observable = hamiltonian_terms[1].observable +observable_re = adapt(ConcreteRArray, observable) +coef_re = ConcreteRNumber(hamiltonian_terms[1].weight) + +T = typeof(1.0u"ns") +results = Vector{Tuple{String,String,T,T,Float64}}() + +# NOTE first compilation still takes a while... + +@info "Benchmarking 'primal' with 'only XLA' pipeline..." + +# primal +## only XLA +f_xla = Base.with_logger(dbg_logger) do + @time @compile compile_options = Reactant.DefaultXLACompileOptions(; sync=true) expectation( + params_re, observable_re, coef_re + ) +end +b = @benchmark $f_xla($params_re, $observable_re, $coef_re) setup = (GC.gc(true)) +baseline = median(b).time +push!( + results, ("Primal", "Only XLA", median(b).time * 1.0u"ns", std(b).time * 1.0u"ns", 1.0) +) + +@info "Benchmarking 'primal' with 'default' pipeline..." + +## default +f_default = Base.with_logger(dbg_logger) do + @compile sync = true expectation(params_re, observable_re, coef_re) +end +b = @benchmark $f_default($params_re, $observable_re, $coef_re) setup = (GC.gc(true)) +push!( + results, + ( + "Primal", + "Default", + median(b).time * 1u"ns", + std(b).time * 1u"ns", + median(b).time / baseline, + ), +) + +# gradient +for mode in [:all, :before_enzyme, :after_enzyme] + ## only XLA + @info "Benchmarking 'gradient' with 'only XLA' pipeline and $(Meta.quot(mode)) mode..." + + ∇f_xla = Base.with_logger(dbg_logger) do + @compile compile_options = Reactant.DefaultXLACompileOptions(; sync=true) ∇expectation( + params_re, observable_re, coef_re + ) + end + local b = @benchmark $∇f_xla($params_re, $observable_re, $coef_re) setup = (GC.gc(true)) + local baseline = median(b).time + push!( + results, + @show(( + "Gradient ($mode)", + "Only XLA", + median(b).time * 1u"ns", + std(b).time * 1u"ns", + 1.0, + )), + ) + + ## default + @info "Benchmarking 'gradient' with 'default' pipeline and $(Meta.quot(mode)) mode..." + + ∇f_default = Base.with_logger(dbg_logger) do + @compile sync = true optimize = mode ∇expectation(params_re, observable_re, coef_re) + end + b = @benchmark $∇f_default($params_re, $observable_re, $coef_re) setup = (GC.gc(true)) + push!( + results, + @show(( + "Gradient ($mode)", + "Default", + median(b).time * 1u"ns", + std(b).time * 1u"ns", + median(b).time / baseline, + )), + ) +end + +# print results +header = ( + ["Mode", "Optimization Passes", "Median Time", "Std. Dev. Time", "Relative Timing"], + ["", "", "μs", "μs", "Time / XLA Time"], +) + +let results = copy(results) + results = permutedims(stack(collect.(results)), (2, 1)) + results[:, 3] .= uconvert.(u"μs", results[:, 3]) + results[:, 4] .= uconvert.(u"μs", results[:, 4]) + + hl_r = Highlighter((data, i, j) -> j == 5 && data[i, j] > 1.0, crayon"bold red") + hl_g = Highlighter((data, i, j) -> j == 5 && data[i, j] < 1.0, crayon"bold green") + display( + pretty_table( + results; + header, + header_crayon=crayon"yellow bold", + highlighters=(hl_r, hl_g), + tf=tf_unicode_rounded, + ), + ) +end diff --git a/perf/vqe/utils.jl b/perf/vqe/utils.jl new file mode 100644 index 0000000000..7844d55704 --- /dev/null +++ b/perf/vqe/utils.jl @@ -0,0 +1,47 @@ +using YaoBlocks +using Tangles + +# simplified from `qiskit.circuit.library.efficient_su2` +function efficient_su2(nqubits, nlayers) + gates = [] + + for layer in 1:nlayers + # apply a layer of SU(2) gates (i.e. single-qubit rotations that can generate the full SU(2) group) + for qid in 1:nqubits + # apply a single-qubit rotation gate + push!(gates, put(qid => YaoBlocks.Ry(0.0))) + push!(gates, put(qid => YaoBlocks.Rz(0.0))) + end + + # apply a layer of entangling gates (i.e. two-qubit CX gates) = + for (qid_control, qid_target) in zip((nqubits - 1):-1:1, nqubits:-1:2) + push!(gates, control(qid_control, qid_target => YaoBlocks.X)) + end + end + + return chain(nqubits, gates...) +end + +struct StackTag{T} + id::T + t::Int +end + +function generic_stack(tns...) + tn = GenericTensorNetwork() + tns = copy.(tns) + + for (i, tni) in enumerate(tns) + for ind in inds(tni) + replace!(tni, ind => Index(StackTag(ind.tag, i))) + end + end + + append!(tn, all_tensors(tns[1])) + for i in 2:length(tns) + @align! outputs(tns[i - 1]) => inputs(tns[i]) + append!(tn, all_tensors(tns[i])) + end + + return tn +end