Time Evolution

[1]:
import numpy as np

from qilisdk.analog import Schedule, X, Y, Z
from qilisdk.backends import QutipBackend
from qilisdk.common import ket, tensor_prod
from qilisdk.functionals import TimeEvolution

T = 10  # Total evolution time
dt = 0.1  # Time-step
steps = np.linspace(0, T, int(T / dt))
nqubits = 1

# Define two Hamiltonians for the simulation
H1 = sum(X(i) for i in range(nqubits))
H2 = sum(Z(i) for i in range(nqubits))

# Create a schedule for the time evolution
schedule = Schedule(
    T,
    dt,
    hamiltonians={"h1": H1, "h2": H2},
    schedule={t: {"h1": 1 - steps[t] / T, "h2": steps[t] / T} for t in range(len(steps))},
)

# Prepare an initial state (equal superposition)
state = tensor_prod([(ket(0) + ket(1)).unit() for _ in range(nqubits)]).unit()

# Perform time evolution on the CUDA backend with observables to monitor
time_evolution = TimeEvolution(
    schedule=schedule, initial_state=state, observables=[Z(0), X(0), Y(0)], store_intermediate_results=True
)

backend = QutipBackend()
results = backend.execute(time_evolution)
print("Time Evolution Results:", results)
Time Evolution Results: TimeEvolutionResult(
  final_expected_values=array([ 0.99426889, -0.03403984,  0.10134429]),
  expected_values=array([[ 0.00000000e+00,  1.00000000e+00,  0.00000000e+00],
       [ 6.31847574e-09,  1.00000000e+00,  1.22854620e-05],
       [ 2.05610973e-04,  9.99997828e-01,  2.07392438e-03],
       [ 1.01183010e-03,  9.99980848e-01,  6.10576876e-03],
       [ 2.77816943e-03,  9.99924730e-01,  1.19505316e-02],
       [ 5.81553140e-03,  9.99794905e-01,  1.93991410e-02],
       [ 1.03795510e-02,  9.99548169e-01,  2.82085466e-02],
       [ 1.66675105e-02,  9.99136560e-01,  3.80569196e-02],
       [ 2.48063566e-02,  9.98508954e-01,  4.86262688e-02],
       [ 3.48574234e-02,  9.97613969e-01,  5.95930331e-02],
       [ 4.68193048e-02,  9.96402464e-01,  7.06405214e-02],
       [ 6.06328224e-02,  9.94830382e-01,  8.14626994e-02],
       [ 7.61866869e-02,  9.92861062e-01,  9.17741808e-02],
       [ 9.33252160e-02,  9.90468542e-01,  1.01303860e-01],
       [ 1.11848622e-01,  9.87632295e-01,  1.09874182e-01],
       [ 1.31541195e-01,  9.84349567e-01,  1.17272521e-01],
       [ 1.52155212e-01,  9.80621994e-01,  1.23407032e-01],
       [ 1.73441992e-01,  9.76465262e-01,  1.28193085e-01],
       [ 1.95152833e-01,  9.71908391e-01,  1.31565387e-01],
       [ 2.17033876e-01,  9.66981436e-01,  1.33578442e-01],
       [ 2.38858980e-01,  9.61729905e-01,  1.34245960e-01],
       [ 2.60412177e-01,  9.56201580e-01,  1.33656409e-01],
       [ 2.81502028e-01,  9.50447522e-01,  1.31932244e-01],
       [ 3.01967489e-01,  9.44522699e-01,  1.29199484e-01],
       [ 3.21673446e-01,  9.38479230e-01,  1.25630128e-01],
       [ 3.40517645e-01,  9.32365168e-01,  1.21420458e-01],
       [ 3.58436014e-01,  9.26228853e-01,  1.16720764e-01],
       [ 3.75387161e-01,  9.20107451e-01,  1.11744166e-01],
       [ 3.91364577e-01,  9.14030906e-01,  1.06683037e-01],
       [ 4.06391003e-01,  9.08021220e-01,  1.01704558e-01],
       [ 4.20511453e-01,  9.02088711e-01,  9.69849288e-02],
       [ 4.33792928e-01,  8.96229721e-01,  9.27145189e-02],
       [ 4.46327040e-01,  8.90431204e-01,  8.90193470e-02],
       [ 4.58217195e-01,  8.84666552e-01,  8.60354216e-02],
       [ 4.69579941e-01,  8.78897469e-01,  8.38684493e-02],
       [ 4.80539870e-01,  8.73076326e-01,  8.25782158e-02],
       [ 4.91221471e-01,  8.67140712e-01,  8.22706003e-02],
       [ 5.01756810e-01,  8.61022397e-01,  8.29489954e-02],
       [ 5.12270112e-01,  8.54644367e-01,  8.46306052e-02],
       [ 5.22880120e-01,  8.47922837e-01,  8.73111804e-02],
       [ 5.33697686e-01,  8.40770245e-01,  9.09514970e-02],
       [ 5.44821619e-01,  8.33097055e-01,  9.54918918e-02],
       [ 5.56336007e-01,  8.24809995e-01,  1.00889638e-01],
       [ 5.68314906e-01,  8.15821680e-01,  1.07019410e-01],
       [ 5.80811657e-01,  8.06048453e-01,  1.13770431e-01],
       [ 5.93862278e-01,  7.95413035e-01,  1.21019414e-01],
       [ 6.07483285e-01,  7.83840278e-01,  1.28679748e-01],
       [ 6.21683464e-01,  7.71277099e-01,  1.36533171e-01],
       [ 6.36441228e-01,  7.57673632e-01,  1.44475710e-01],
       [ 6.51725660e-01,  7.42997155e-01,  1.52344648e-01],
       [ 6.67488046e-01,  7.27228508e-01,  1.59995019e-01],
       [ 6.83667424e-01,  7.10367145e-01,  1.67264379e-01],
       [ 7.00189077e-01,  6.92431148e-01,  1.73995291e-01],
       [ 7.16967384e-01,  6.73460516e-01,  1.80024173e-01],
       [ 7.33903949e-01,  6.53511628e-01,  1.85222960e-01],
       [ 7.50893962e-01,  6.32659346e-01,  1.89474033e-01],
       [ 7.67829254e-01,  6.10998851e-01,  1.92661984e-01],
       [ 7.84597486e-01,  5.88641479e-01,  1.94699753e-01],
       [ 8.01088265e-01,  5.65718429e-01,  1.95500001e-01],
       [ 8.17192287e-01,  5.42377739e-01,  1.94995267e-01],
       [ 8.32797771e-01,  5.18769136e-01,  1.93200557e-01],
       [ 8.47811669e-01,  4.95066437e-01,  1.90064715e-01],
       [ 8.62141691e-01,  4.71446548e-01,  1.85606726e-01],
       [ 8.75705527e-01,  4.48089429e-01,  1.79876884e-01],
       [ 8.88436201e-01,  4.25181008e-01,  1.72922604e-01],
       [ 9.00276795e-01,  4.02902715e-01,  1.64836571e-01],
       [ 9.11183872e-01,  3.81426508e-01,  1.55749060e-01],
       [ 9.21132117e-01,  3.60917002e-01,  1.45789370e-01],
       [ 9.30110561e-01,  3.41524314e-01,  1.35112872e-01],
       [ 9.38121586e-01,  3.23374564e-01,  1.23922481e-01],
       [ 9.45186888e-01,  3.06576886e-01,  1.12393770e-01],
       [ 9.51339144e-01,  2.91209087e-01,  1.00752675e-01],
       [ 9.56625973e-01,  2.77318690e-01,  8.92249498e-02],
       [ 9.61107396e-01,  2.64919695e-01,  7.80392792e-02],
       [ 9.64853896e-01,  2.53990860e-01,  6.74210818e-02],
       [ 9.67944072e-01,  2.44473344e-01,  5.75939079e-02],
       [ 9.70462651e-01,  2.36270274e-01,  4.87708884e-02],
       [ 9.72498150e-01,  2.29247312e-01,  4.11463037e-02],
       [ 9.74140184e-01,  2.23232650e-01,  3.49010830e-02],
       [ 9.75477305e-01,  2.18023575e-01,  3.01620375e-02],
       [ 9.76593347e-01,  2.13387865e-01,  2.70380148e-02],
       [ 9.77565832e-01,  2.09069039e-01,  2.55964926e-02],
       [ 9.78463686e-01,  2.04792511e-01,  2.58619792e-02],
       [ 9.79345290e-01,  2.00274578e-01,  2.78010190e-02],
       [ 9.80256736e-01,  1.95231681e-01,  3.13260549e-02],
       [ 9.81230766e-01,  1.89386401e-01,  3.63176959e-02],
       [ 9.82286739e-01,  1.82480153e-01,  4.25882187e-02],
       [ 9.83430286e-01,  1.74283573e-01,  4.99009835e-02],
       [ 9.84653870e-01,  1.64605285e-01,  5.79815222e-02],
       [ 9.85938367e-01,  1.53302864e-01,  6.65114175e-02],
       [ 9.87254568e-01,  1.40290642e-01,  7.51462213e-02],
       [ 9.88565962e-01,  1.25548491e-01,  8.35159603e-02],
       [ 9.89830226e-01,  1.09123170e-01,  9.12592835e-02],
       [ 9.91004524e-01,  9.11373934e-02,  9.80000441e-02],
       [ 9.92046536e-01,  7.17864370e-02,  1.03394282e-01],
       [ 9.92918579e-01,  5.13367393e-02,  1.07131857e-01],
       [ 9.93590639e-01,  3.01204767e-02,  1.08951363e-01],
       [ 9.94042501e-01,  8.52545764e-03,  1.08659208e-01],
       [ 9.94266707e-01, -1.30151312e-02,  1.06133513e-01],
       [ 9.94268889e-01, -3.40398408e-02,  1.01344292e-01]])
  final_state=QTensor(shape=2x1, nnz=2, format='csr')
[[-0.3178677 -9.46622717e-01j]
 [ 0.05353088+4.41741858e-06j]]
  intermediate_states=[QTensor(shape=2x1, nnz=2, format='csr')
[[0.70710678+0.j]
 [0.70710678+0.j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.70350254-0.07130341j]
 [0.70350341-0.07129477j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.69279881-0.14188945j]
 [0.69294909-0.14042346j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.67524315-0.21107487j]
 [0.67583516-0.20673876j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.6511407 -0.27821731j]
 [0.65260349-0.26966572j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.62084742-0.3427189j ]
 [0.62374116-0.32869317j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.5847634 -0.40403162j]
 [0.58977473-0.38337448j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.54332753-0.46165891j]
 [0.55123992-0.43335989j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.49700823-0.51515628j]
 [0.50869835-0.47835428j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.44629882-0.56413303j]
 [0.462723  -0.51813001j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.39171074-0.60825352j]
 [0.41389081-0.55252579j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.33376905-0.64723615j]
 [0.36277323-0.58144576j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.27300585-0.68085325j]
 [0.30992916-0.60485583j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.20995648-0.70892939j]
 [0.25589145-0.62278163j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.14515131-0.73133809j]
 [0.20120662-0.63528858j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.07911801-0.74800464j]
 [0.14634922-0.64250394j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.0123703 -0.75889695j]
 [0.09181385-0.64458716j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.05458957-0.76402943j]
 [ 0.03804063-0.64174131j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.12127506-0.76345843j]
 [-0.01457851-0.63420111j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.18722265-0.75727447j]
 [-0.06563933-0.62223351j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.2519859-0.74560888j]
 [-0.1148213-0.60612423j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.31514355-0.72862242j]
 [-0.16181667-0.58618195j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.37629903-0.70650552j]
 [-0.20635287-0.56273216j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.43508016-0.679477j  ]
 [-0.24820513-0.53610677j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.49114262-0.64777747j]
 [-0.28717137-0.50665163j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.54416984-0.61166821j]
 [-0.32308114-0.47472071j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.59386979-0.57143388j]
 [-0.35582179-0.44065048j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.63998061-0.52736932j]
 [-0.38528823-0.4047955j ]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.68226722-0.47978509j]
 [-0.4114151 -0.36749875j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.72052074-0.42900508j]
 [-0.43417254-0.32908769j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.75455981-0.37536011j]
 [-0.45355186-0.28988788j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.78423034-0.31918528j]
 [-0.46956392-0.25022642j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.80940288-0.26082656j]
 [-0.48225536-0.21039545j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.82997363-0.20062995j]
 [-0.4916885 -0.17068633j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.84586309-0.1389446j ]
 [-0.49794764-0.13137038j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.85701525-0.07612353j]
 [-0.50113719-0.09269081j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.86339692-0.01250979j]
 [-0.5013725 -0.05490796j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.86499799+0.05154495j]
 [-0.49878798-0.01822489j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.86182902+0.11569697j]
 [-0.49352878+0.01715477j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.85392125+0.17960668j]
 [-0.4857513 +0.05104521j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.84132642+0.24293763j]
 [-0.47562031+0.08328553j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.82411569+0.30535903j]
 [-0.46330765+0.11373309j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.80237656+0.36655131j]
 [-0.44899651+0.14224673j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.77621934+0.4261936j ]
 [-0.43286431+0.16873361j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.74576968+0.48397666j]
 [-0.41509609+0.19310466j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.7111703 +0.5395998j ]
 [-0.39587873+0.21528793j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.67257509+0.59277685j]
 [-0.37541281+0.23520965j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.63016887+0.64321764j]
 [-0.35386398+0.25286074j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.58413714+0.69065506j]
 [-0.33143151+0.26820242j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.53468823+0.73482741j]
 [-0.30829506+0.2812318j ]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.48204309+0.77548597j]
 [-0.28463734+0.29195472j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.42644031+0.81239299j]
 [-0.26062962+0.30039722j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.36813312+0.84532393j]
 [-0.23643795+0.30659836j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.30739217+0.87406736j]
 [-0.21221704+0.31061268j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.24449697+0.89842819j]
 [-0.18812527+0.31250106j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.17974114+0.91822661j]
 [-0.16431321+0.31233666j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.11343428+0.93329914j]
 [-0.14091829+0.31020543j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.04589644+0.94350001j]
 [-0.11807468+0.30620194j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[ 0.02253541+0.94870242j]
 [-0.09589904+0.30043176j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[ 0.09151191+0.94880014j]
 [-0.07449818+0.29300832j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[ 0.16068672+0.94370475j]
 [-0.05399667+0.28405189j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[ 0.2296813 +0.93335542j]
 [-0.03446803+0.27368982j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[ 0.29811835+0.91771253j]
 [-0.01599596+0.26205588j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.36561278+0.89676087j]
 [0.00134385+0.24928985j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.4317653 +0.87051527j]
 [0.01749947+0.23553273j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.49617499+0.83901655j]
 [0.0324214 +0.22093088j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.55843911+0.80233266j]
 [0.04606617+0.20563553j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.61814593+0.76056667j]
 [0.05841183+0.18979463j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.67488372+0.7138538j ]
 [0.06944595+0.17355685j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.72824793+0.66235621j]
 [0.07915707+0.15707758j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.77782747+0.606282j  ]
 [0.08756053+0.14049807j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.82322562+0.5458655j ]
 [0.09467005+0.12396778j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.8640522 +0.48138008j]
 [0.10051319+0.10762952j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.89992869+0.41313685j]
 [0.10512832+0.09162062j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.93049138+0.34148609j]
 [0.10856428+0.07607135j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.95539632+0.26681436j]
 [0.11087818+0.06110641j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.97432212+0.18954614j]
 [0.1121356 +0.04684315j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.98697394+0.11014318j]
 [0.11241031+0.03338931j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.99308775+0.02909991j]
 [0.11178233+0.0208475j ]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.99243378-0.05304567j]
 [0.11033988+0.00929832j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.98482216-0.13572765j]
 [0.10817546-0.00118132j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.9701063 -0.21834992j]
 [0.10538622-0.01052753j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.94818699-0.30028865j]
 [0.10207296-0.01868868j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.91901796-0.3808919j ]
 [0.09833813-0.02563137j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.88261033-0.45948599j]
 [0.09428443-0.03133812j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.8390322 -0.53538804j]
 [0.09001745-0.0357977j ]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.78841844-0.60789779j]
 [0.08563847-0.03902157j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.73097193-0.67630997j]
 [0.08124557-0.04103673j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.666964  -0.73992294j]
 [0.07693415-0.04188319j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.59674104-0.79804092j]
 [0.07279226-0.04161855j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.52072328-0.84998503j]
 [0.06890198-0.04031419j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.43940898-0.89509928j]
 [0.06533462-0.03805793j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.35336646-0.93276324j]
 [0.06215795-0.03494676j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.26324755-0.9623944j ]
 [0.05942045-0.03109578j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.16977402-0.98346329j]
 [0.0571633 -0.02662873j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[0.07373996-0.99550073j]
 [0.05541391-0.02167969j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.02399246-0.99810805j]
 [ 0.05418493-0.01639128j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.12250024-0.99096667j]
 [ 0.05347593-0.01091212j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.22080152-0.97384806j]
 [ 0.05326854-0.00539531j]],
 QTensor(shape=2x1, nnz=2, format='csr')
[[-0.3178677 -9.46622717e-01j]
 [ 0.05353088+4.41741858e-06j]]]
)