Skip to content

Commit

Permalink
Refactor to set qubit_properties when constructing target
Browse files Browse the repository at this point in the history
  • Loading branch information
rathishcholarajan committed Apr 22, 2022
1 parent b51a86e commit c8437be
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 33 deletions.
27 changes: 0 additions & 27 deletions qiskit_ibm_provider/ibm_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,11 @@
IBMBackendApiError,
IBMBackendApiProtocolError,
)
from .ibm_qubit_properties import IBMQubitProperties
from .job import IBMJob, IBMCircuitJob, IBMCompositeJob
from .utils import validate_job_tags
from .utils.backend import convert_reservation_data
from .utils.backend_converter import (
convert_to_target,
qubit_props_dict_from_props,
)
from .utils.converters import local_to_utc
from .utils.json_decoder import defaults_from_server_data, properties_from_server_data
Expand Down Expand Up @@ -214,7 +212,6 @@ def __init__(
self._api_client = api_client
self._configuration = configuration
self._properties = None
self._qubit_properties: Dict[int, IBMQubitProperties] = None
self._defaults = None
self._target = None
self._max_circuits = configuration.max_experiments
Expand Down Expand Up @@ -345,30 +342,6 @@ def target(self) -> Target:
self._convert_to_target()
return self._target

def qubit_properties(
self, qubit: Union[int, List[int]]
) -> Union[IBMQubitProperties, List[IBMQubitProperties]]:
"""Return IBMQubitProperties for a given qubit.
Args:
qubit: The qubit to get the
:class:`~qiskit_ibm_provider.IBMQubitProperties` object for. This can
be a single integer for 1 qubit or a list of qubits and a list
of :class:`~qiskit_ibm_provider.IBMQubitProperties` objects will be
returned in the same order
Returns:
IBMQubitProperties or a list of IBMQubitProperties
"""
self._get_properties()
if not self._qubit_properties:
self._qubit_properties = qubit_props_dict_from_props(self._properties)
if isinstance(qubit, int): # type: ignore[unreachable]
return self._qubit_properties.get(qubit)
if isinstance(qubit, List):
return [self._qubit_properties.get(q) for q in qubit]
return None

def run(
self,
circuits: Union[
Expand Down
17 changes: 11 additions & 6 deletions qiskit_ibm_provider/utils/backend_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

"""Converters for migration from IBM Quantum BackendV1 to BackendV2."""

from typing import Any, Dict
from typing import Any, Dict, List

from qiskit.transpiler.target import Target, InstructionProperties
from qiskit.utils.units import apply_prefix
Expand Down Expand Up @@ -47,9 +47,13 @@ def convert_to_target(
"reset": Reset(),
}
custom_gates = {}
target = Target(num_qubits=configuration.n_qubits)
target = None
# Parse from properties if it exsits
if properties is not None:
qubit_properties = qubit_props_list_from_props(properties=properties)
target = Target(
num_qubits=configuration.n_qubits, qubit_properties=qubit_properties
)
# Parse instructions
gates: Dict[str, Any] = {}
for gate in properties.gates:
Expand Down Expand Up @@ -86,6 +90,7 @@ def convert_to_target(
target.add_instruction(Measure(), measure_props)
# Parse from configuration because properties doesn't exist
else:
target = Target(num_qubits=configuration.n_qubits)
for gate in configuration.gates:
name = gate.name
gate_props = (
Expand Down Expand Up @@ -129,13 +134,13 @@ def convert_to_target(
return target


def qubit_props_dict_from_props(
def qubit_props_list_from_props(
properties: BackendProperties,
) -> Dict[int, IBMQubitProperties]:
) -> List[IBMQubitProperties]:
"""Uses BackendProperties to construct
and return IBMQubitProperties class.
and return a list of IBMQubitProperties.
"""
qubit_props = {}
qubit_props: List[IBMQubitProperties] = []
for qubit, _ in enumerate(properties.qubits):
t_1 = properties.t1(qubit) * 1e-6 # microseconds to seconds
t_2 = properties.t2(qubit) * 1e-6 # microseconds to seconds
Expand Down

0 comments on commit c8437be

Please sign in to comment.