Skip to main contentIBM Quantum Documentation
This page is from an old version of Qiskit SDK. Go to the latest version.

qiskit.transpiler.passes.CrosstalkAdaptiveSchedule

class CrosstalkAdaptiveSchedule(*args, **kwargs)

GitHub

Crosstalk mitigation through adaptive instruction scheduling.

CrosstalkAdaptiveSchedule initializer.

Parameters

  • backend_prop (BackendProperties) – backend properties object

  • crosstalk_prop (dict) –

    crosstalk properties object crosstalk_prop[g1][g2] specifies the conditional error rate of g1 when g1 and g2 are executed simultaneously. g1 should be a two-qubit tuple of the form (x,y) where x and y are physical qubit ids. g2 can be either two-qubit tuple (x,y) or single-qubit tuple (x). We currently ignore crosstalk between pairs of single-qubit gates. Gate pairs which are not specified are assumed to be crosstalk free.

    Example:

    crosstalk_prop = {(0, 1) : {(2, 3) : 0.2, (2) : 0.15},
                                (4, 5) : {(2, 3) : 0.1},
                                (2, 3) : {(0, 1) : 0.05, (4, 5): 0.05}}

    The keys of the crosstalk_prop are tuples for ordered tuples for CX gates e.g., (0, 1) corresponding to CX 0, 1 in the hardware. Each key has an associated value dict which specifies the conditional error rates with nearby gates e.g., (0, 1) : {(2, 3) : 0.2, (2) : 0.15} means that CNOT 0, 1 has an error rate of 0.2 when it is executed in parallel with CNOT 2,3 and an error rate of 0.15 when it is executed in parallel with a single qubit gate on qubit 2.

  • weight_factor (float) – weight of gate error/crosstalk terms in the objective weightfactorfidelities+(1weightfactor)decoherenceerrorsweight_factor*fidelities + (1-weight_factor)*decoherence errors. Weight can be varied from 0 to 1, with 0 meaning that only decoherence errors are optimized and 1 meaning that only crosstalk errors are optimized. weight_factor should be tuned per application to get the best results.

  • measured_qubits (list) – a list of qubits that will be measured in a particular circuit. This arg need not be specified for circuits which already include measure gates. The arg is useful when a subsequent module such as state_tomography_circuits inserts the measure gates. If CrosstalkAdaptiveSchedule is made aware of those measurements, it is included in the optimization.

Raises

ImportError – if unable to import z3 solver

__init__

__init__(backend_prop, crosstalk_prop, weight_factor=0.5, measured_qubits=None)

CrosstalkAdaptiveSchedule initializer.

Parameters

  • backend_prop (BackendProperties) – backend properties object

  • crosstalk_prop (dict) –

    crosstalk properties object crosstalk_prop[g1][g2] specifies the conditional error rate of g1 when g1 and g2 are executed simultaneously. g1 should be a two-qubit tuple of the form (x,y) where x and y are physical qubit ids. g2 can be either two-qubit tuple (x,y) or single-qubit tuple (x). We currently ignore crosstalk between pairs of single-qubit gates. Gate pairs which are not specified are assumed to be crosstalk free.

    Example:

    crosstalk_prop = {(0, 1) : {(2, 3) : 0.2, (2) : 0.15},
                                (4, 5) : {(2, 3) : 0.1},
                                (2, 3) : {(0, 1) : 0.05, (4, 5): 0.05}}

    The keys of the crosstalk_prop are tuples for ordered tuples for CX gates e.g., (0, 1) corresponding to CX 0, 1 in the hardware. Each key has an associated value dict which specifies the conditional error rates with nearby gates e.g., (0, 1) : {(2, 3) : 0.2, (2) : 0.15} means that CNOT 0, 1 has an error rate of 0.2 when it is executed in parallel with CNOT 2,3 and an error rate of 0.15 when it is executed in parallel with a single qubit gate on qubit 2.

  • weight_factor (float) – weight of gate error/crosstalk terms in the objective weightfactorfidelities+(1weightfactor)decoherenceerrorsweight_factor*fidelities + (1-weight_factor)*decoherence errors. Weight can be varied from 0 to 1, with 0 meaning that only decoherence errors are optimized and 1 meaning that only crosstalk errors are optimized. weight_factor should be tuned per application to get the best results.

  • measured_qubits (list) – a list of qubits that will be measured in a particular circuit. This arg need not be specified for circuits which already include measure gates. The arg is useful when a subsequent module such as state_tomography_circuits inserts the measure gates. If CrosstalkAdaptiveSchedule is made aware of those measurements, it is included in the optimization.

Raises

ImportError – if unable to import z3 solver


Methods

__init__(backend_prop, crosstalk_prop[, …])CrosstalkAdaptiveSchedule initializer.
assign_gate_id(dag)ID for each gate
basic_bounds()Basic variable bounds for optimization
check_dag_dependency(gate1, gate2)gate2 is a DAG dependent of gate1 if it is a descendant of gate1
check_xtalk_dependency(t_1, t_2)Check if two gates have a crosstalk dependency.
coherence_constraints()Set decoherence errors based on qubit lifetimes
create_updated_dag(layers, barriers)Given a set of layers and barries, construct a new dag
create_z3_vars()Setup the variables required for Z3 optimization
cx_tuple(gate)Representation for two-qubit gate Note: current implementation assumes that the CX error rates and crosstalk behavior are independent of gate direction
enforce_schedule_on_dag(input_gate_times)Z3 outputs start times for each gate.
extract_crosstalk_relevant_sets()Extract the set of program gates which potentially have crosstalk noise
extract_dag_overlap_sets(dag)Gate A, B are overlapping if A is neither a descendant nor an ancestor of B.
extract_solution()Extract gate start and finish times from Z3 solution
fidelity_constraints()Set gate fidelity based on gate overlap conditions
filter_candidates(candidates, layer, …)For a gate G and layer L, L is a candidate layer for G if no gate in L has a DAG dependency with G, and if Z3 allows gates in L and G to overlap.
find_layer(layers, triplet)Find the appropriate layer for a gate
gate_tuple(gate)Representation for gate
generate_barriers(layers)For each gate g, see if a barrier is required to serialize it with some previously processed gate
is_significant_xtalk(gate1, gate2)Given two conditional gate error rates check if there is high crosstalk by comparing with independent error rates.
name()Return the name of the pass.
objective_function()Objective function is a weighted combination of gate errors and decoherence errors
parse_backend_properties()This function assumes that gate durations and coherence times are in seconds in backend.properties() This function converts gate durations and coherence times to nanoseconds.
powerset(iterable)Finds the set of all subsets of the given iterable This function is used to generate constraints for the Z3 optimization
r2f(val)Convert Z3 Real to Python float
reset()Reset variables
run(dag)Main scheduling function
scheduling_constraints()DAG scheduling constraints optimization Sets overlap indicator variables
singleq_tuple(gate)Representation for single-qubit gate
solve_optimization()Setup and solve a Z3 optimization for finding the best schedule

Attributes

is_analysis_passCheck if the pass is an analysis pass.
is_transformation_passCheck if the pass is a transformation pass.

assign_gate_id

assign_gate_id(dag)

ID for each gate

basic_bounds

basic_bounds()

Basic variable bounds for optimization

check_dag_dependency

check_dag_dependency(gate1, gate2)

gate2 is a DAG dependent of gate1 if it is a descendant of gate1

check_xtalk_dependency

check_xtalk_dependency(t_1, t_2)

Check if two gates have a crosstalk dependency. We do not consider crosstalk between pairs of single qubit gates.

coherence_constraints

coherence_constraints()

Set decoherence errors based on qubit lifetimes

create_updated_dag

create_updated_dag(layers, barriers)

Given a set of layers and barries, construct a new dag

create_z3_vars

create_z3_vars()

Setup the variables required for Z3 optimization

cx_tuple

cx_tuple(gate)

Representation for two-qubit gate Note: current implementation assumes that the CX error rates and crosstalk behavior are independent of gate direction

enforce_schedule_on_dag

enforce_schedule_on_dag(input_gate_times)

Z3 outputs start times for each gate. Some gates need to be serialized to implement the Z3 schedule. This function inserts barriers to implement those serializations

extract_crosstalk_relevant_sets

extract_crosstalk_relevant_sets()

Extract the set of program gates which potentially have crosstalk noise

extract_dag_overlap_sets

extract_dag_overlap_sets(dag)

Gate A, B are overlapping if A is neither a descendant nor an ancestor of B. Currenty overlaps (A,B) are considered when A is a 2q gate and B is either 2q or 1q gate.

extract_solution

extract_solution()

Extract gate start and finish times from Z3 solution

fidelity_constraints

fidelity_constraints()

Set gate fidelity based on gate overlap conditions

filter_candidates

filter_candidates(candidates, layer, layer_id, triplet)

For a gate G and layer L, L is a candidate layer for G if no gate in L has a DAG dependency with G, and if Z3 allows gates in L and G to overlap.

find_layer

find_layer(layers, triplet)

Find the appropriate layer for a gate

gate_tuple

gate_tuple(gate)

Representation for gate

generate_barriers

generate_barriers(layers)

For each gate g, see if a barrier is required to serialize it with some previously processed gate

is_analysis_pass

Check if the pass is an analysis pass.

If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass.

is_significant_xtalk

is_significant_xtalk(gate1, gate2)

Given two conditional gate error rates check if there is high crosstalk by comparing with independent error rates.

is_transformation_pass

Check if the pass is a transformation pass.

If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read).

name

name()

Return the name of the pass.

objective_function

objective_function()

Objective function is a weighted combination of gate errors and decoherence errors

parse_backend_properties

parse_backend_properties()

This function assumes that gate durations and coherence times are in seconds in backend.properties() This function converts gate durations and coherence times to nanoseconds.

powerset

powerset(iterable)

Finds the set of all subsets of the given iterable This function is used to generate constraints for the Z3 optimization

r2f

r2f(val)

Convert Z3 Real to Python float

reset

reset()

Reset variables

run

run(dag)

Main scheduling function

scheduling_constraints

scheduling_constraints()

DAG scheduling constraints optimization Sets overlap indicator variables

singleq_tuple

singleq_tuple(gate)

Representation for single-qubit gate

solve_optimization

solve_optimization()

Setup and solve a Z3 optimization for finding the best schedule

Was this page helpful?
Report a bug or request content on GitHub.