13
13
"""A Pulse simulation backend based on Qiskit-Dynamics"""
14
14
15
15
import datetime
16
+ import importlib .metadata
17
+ from functools import cached_property
16
18
from itertools import chain
17
19
from typing import Any , Dict , List , Optional , Tuple , Union
18
20
19
21
import numpy as np
22
+ from packaging .version import Version
20
23
21
24
from qiskit import QuantumCircuit
22
25
from qiskit .circuit import CircuitInstruction
@@ -510,10 +513,25 @@ def __init__(
510
513
self .rabi_rate_12 = 6.876
511
514
512
515
if noise is True :
513
- evaluation_mode = "dense_vectorized"
516
+ if self ._dynamics_ge_05 :
517
+ solver_args = {
518
+ "array_library" : "numpy" ,
519
+ "vectorized" : True ,
520
+ }
521
+ else :
522
+ solver_args = {
523
+ "evaluation_mode" : "dense_vectorized" ,
524
+ }
514
525
static_dissipators = [t1_dissipator ]
515
526
else :
516
- evaluation_mode = "dense"
527
+ if self ._dynamics_ge_05 :
528
+ solver_args = {
529
+ "array_library" : "numpy" ,
530
+ }
531
+ else :
532
+ solver_args = {
533
+ "evaluation_mode" : "dense" ,
534
+ }
517
535
static_dissipators = None
518
536
519
537
super ().__init__ (
@@ -523,9 +541,9 @@ def __init__(
523
541
rotating_frame = r_frame ,
524
542
rwa_cutoff_freq = 1.9 * qubit_frequency ,
525
543
rwa_carrier_freqs = [qubit_frequency ],
526
- evaluation_mode = evaluation_mode ,
527
544
atol = atol ,
528
545
rtol = rtol ,
546
+ ** solver_args ,
529
547
** kwargs ,
530
548
)
531
549
@@ -614,3 +632,9 @@ def __init__(
614
632
self ._simulated_pulse_unitaries = {
615
633
(schedule .name , (0 ,), ()): self .solve (schedule , (0 ,)) for schedule in default_schedules
616
634
}
635
+
636
+ @cached_property
637
+ def _dynamics_ge_05 (self ):
638
+ """True if installed version of qiskit-dynamics>=0.5.0.dev0"""
639
+ dyn_version = Version (importlib .metadata .distribution ("qiskit-dynamics" ).version )
640
+ return dyn_version > Version ("0.5.0.dev0" )
0 commit comments