Skip to content

Commit

Permalink
Merge from main and fix conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
ElePT committed Jan 12, 2024
2 parents 4f8ba72 + 109d677 commit 6ca23b3
Show file tree
Hide file tree
Showing 170 changed files with 2,861 additions and 6,606 deletions.
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ pulse/ @Qiskit/terra-core @eggerdj @wshanks
synthesis/ @Qiskit/terra-core @alexanderivrii @ShellyGarion
scheduler/ @Qiskit/terra-core @eggerdj @wshanks
visualization/ @Qiskit/terra-core @nonhermitian
primitives/ @Qiskit/terra-core @ikkoham @t-imamichi
primitives/ @Qiskit/terra-core @Qiskit/qiskit-primitives
# Override the release notes directories to have _no_ code owners, so any review
# from somebody with write access is acceptable.
/releasenotes/notes
41 changes: 27 additions & 14 deletions crates/accelerate/src/quantum_circuit/circuit_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,32 +213,33 @@ impl CircuitData {
Ok((ty, args, None::<()>, self_.iter()?).into_py(py))
}

/// Returns the current sequence of registered :class:`.Qubit`
/// instances as a list.
/// Returns the current sequence of registered :class:`.Qubit` instances as a list.
///
/// .. note::
/// .. warning::
///
/// This list is not kept in sync with the container.
/// Do not modify this list yourself. It will invalidate the :class:`CircuitData` data
/// structures.
///
/// Returns:
/// list(:class:`.Qubit`): The current sequence of registered qubits.
#[getter]
pub fn qubits(&self, py: Python<'_>) -> PyObject {
PyList::new(py, self.qubits.as_ref(py)).into_py(py)
pub fn qubits(&self, py: Python<'_>) -> Py<PyList> {
self.qubits.clone_ref(py)
}

/// Returns the current sequence of registered :class:`.Clbit`
/// instances as a list.
///
/// .. note::
/// .. warning::
///
/// This list is not kept in sync with the container.
/// Do not modify this list yourself. It will invalidate the :class:`CircuitData` data
/// structures.
///
/// Returns:
/// list(:class:`.Clbit`): The current sequence of registered clbits.
#[getter]
pub fn clbits(&self, py: Python<'_>) -> PyObject {
PyList::new(py, self.clbits.as_ref(py)).into_py(py)
pub fn clbits(&self, py: Python<'_>) -> Py<PyList> {
self.clbits.clone_ref(py)
}

/// Registers a :class:`.Qubit` instance.
Expand All @@ -251,7 +252,13 @@ impl CircuitData {
/// ValueError: The specified ``bit`` is already present and flag ``strict``
/// was provided.
#[pyo3(signature = (bit, *, strict=true))]
pub fn add_qubit(&mut self, py: Python<'_>, bit: &PyAny, strict: bool) -> PyResult<()> {
pub fn add_qubit(&mut self, py: Python, bit: &PyAny, strict: bool) -> PyResult<()> {
if self.qubits_native.len() != self.qubits.as_ref(bit.py()).len() {
return Err(PyRuntimeError::new_err(concat!(
"This circuit's 'qubits' list has become out of sync with the circuit data.",
" Did something modify it?"
)));
}
let idx: BitType = self.qubits_native.len().try_into().map_err(|_| {
PyRuntimeError::new_err(
"The number of qubits in the circuit has exceeded the maximum capacity",
Expand All @@ -263,7 +270,7 @@ impl CircuitData {
.is_ok()
{
self.qubits_native.push(bit.into_py(py));
self.qubits = PyList::new(py, &self.qubits_native).into_py(py);
self.qubits.as_ref(py).append(bit)?;
} else if strict {
return Err(PyValueError::new_err(format!(
"Existing bit {:?} cannot be re-added in strict mode.",
Expand All @@ -283,7 +290,13 @@ impl CircuitData {
/// ValueError: The specified ``bit`` is already present and flag ``strict``
/// was provided.
#[pyo3(signature = (bit, *, strict=true))]
pub fn add_clbit(&mut self, py: Python<'_>, bit: &PyAny, strict: bool) -> PyResult<()> {
pub fn add_clbit(&mut self, py: Python, bit: &PyAny, strict: bool) -> PyResult<()> {
if self.clbits_native.len() != self.clbits.as_ref(bit.py()).len() {
return Err(PyRuntimeError::new_err(concat!(
"This circuit's 'clbits' list has become out of sync with the circuit data.",
" Did something modify it?"
)));
}
let idx: BitType = self.clbits_native.len().try_into().map_err(|_| {
PyRuntimeError::new_err(
"The number of clbits in the circuit has exceeded the maximum capacity",
Expand All @@ -295,7 +308,7 @@ impl CircuitData {
.is_ok()
{
self.clbits_native.push(bit.into_py(py));
self.clbits = PyList::new(py, &self.clbits_native).into_py(py);
self.clbits.as_ref(py).append(bit)?;
} else if strict {
return Err(PyValueError::new_err(format!(
"Existing bit {:?} cannot be re-added in strict mode.",
Expand Down
2 changes: 0 additions & 2 deletions docs/apidoc/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ API Reference
qpy
quantum_info
result
tools
tools_jupyter
transpiler
transpiler_passes
transpiler_preset
Expand Down
6 changes: 0 additions & 6 deletions docs/apidoc/tools.rst

This file was deleted.

6 changes: 0 additions & 6 deletions docs/apidoc/tools_jupyter.rst

This file was deleted.

1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ qasm3-import = [
]
visualization = [
"matplotlib >= 3.3",
"ipywidgets >= 7.3.0",
"pydot",
"Pillow >= 4.2.1",
"pylatexenc >= 1.4",
Expand Down
53 changes: 0 additions & 53 deletions qiskit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@

_config = _user_config.get_config()

# Moved to after IBMQ and Aer imports due to import issues
# with other modules that check for IBMQ (tools)
from qiskit.execute_function import execute
from qiskit.compiler import transpile, assemble, schedule, sequence

Expand Down Expand Up @@ -125,64 +123,13 @@ def __getattr__(self, attr):
return getattr(self.aer, attr)


class IBMQWrapper:
"""Lazy loading wrapper for IBMQ provider."""

def __init__(self):
self.ibmq = None

def __bool__(self):
if self.ibmq is None:
try:
from qiskit.providers import ibmq

self.ibmq = ibmq.IBMQ
warnings.warn(
"The qiskit.IBMQ entrypoint and the qiskit-ibmq-provider package ("
"accessible from 'qiskit.providers.ibmq`) are deprecated and will be removed "
"in a future release. Instead you should use the qiskit-ibm-provider package "
"which is accessible from 'qiskit_ibm_provider'. You can install it with "
"'pip install qiskit_ibm_provider'",
DeprecationWarning,
stacklevel=2,
)

except ImportError:
return False
return True

def __getattr__(self, attr):
if not self.ibmq:
try:
from qiskit.providers import ibmq

self.ibmq = ibmq.IBMQ
warnings.warn(
"The qiskit.IBMQ entrypoint and the qiskit-ibmq-provider package ("
"accessible from 'qiskit.providers.ibmq`) are deprecated and will be removed "
"in a future release. Instead you should use the qiskit-ibm-provider package "
"which is accessible from 'qiskit_ibm_provider'. You can install it with "
"'pip install qiskit_ibm_provider'. Just replace 'qiskit.IBMQ' with "
"'qiskit_ibm_provider.IBMProvider'",
DeprecationWarning,
stacklevel=2,
)
except ImportError as ex:
raise MissingOptionalLibraryError(
"qiskit-ibmq-provider", "IBMQ provider", "pip install qiskit-ibmq-provider"
) from ex
return getattr(self.ibmq, attr)


Aer = AerWrapper()
IBMQ = IBMQWrapper()

__all__ = [
"Aer",
"AncillaRegister",
"BasicProvider",
"ClassicalRegister",
"IBMQ",
"MissingOptionalLibraryError",
"QiskitError",
"QuantumCircuit",
Expand Down
2 changes: 1 addition & 1 deletion qiskit/assembler/assemble_circuits.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
converters,
QobjHeader,
)
from qiskit.tools.parallel import parallel_map
from qiskit.utils.parallel import parallel_map


PulseLibrary = Dict[str, List[complex]]
Expand Down
6 changes: 3 additions & 3 deletions qiskit/circuit/delay.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import numpy as np
from qiskit.circuit.exceptions import CircuitError
from qiskit.circuit.instruction import Instruction
from qiskit.circuit.gate import Gate
from qiskit.circuit.parameterexpression import ParameterExpression


Expand All @@ -29,13 +30,12 @@ def __init__(self, duration, unit="dt"):

super().__init__("delay", 1, 0, params=[duration], unit=unit)

broadcast_arguments = Gate.broadcast_arguments

def inverse(self):
"""Special case. Return self."""
return self

def broadcast_arguments(self, qargs, cargs):
yield [qarg for sublist in qargs for qarg in sublist], []

def c_if(self, classical, val):
raise CircuitError("Conditional Delay is not yet implemented.")

Expand Down
6 changes: 3 additions & 3 deletions qiskit/circuit/library/basis_change/qft.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class QFT(BlueprintCircuit):
.. plot::
from qiskit.circuit.library import QFT
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = QFT(4)
_generate_circuit_library_visualization(circuit)
Expand All @@ -51,7 +51,7 @@ class QFT(BlueprintCircuit):
.. plot::
from qiskit.circuit.library import QFT
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = QFT(4).inverse()
_generate_circuit_library_visualization(circuit)
Expand All @@ -67,7 +67,7 @@ class QFT(BlueprintCircuit):
.. plot::
from qiskit.circuit.library import QFT
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = QFT(5, approximation_degree=2)
_generate_circuit_library_visualization(circuit)
Expand Down
2 changes: 1 addition & 1 deletion qiskit/circuit/library/boolean_logic/inner_product.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class InnerProduct(QuantumCircuit):
.. plot::
from qiskit.circuit.library import InnerProduct
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = InnerProduct(4)
_generate_circuit_library_visualization(circuit)
"""
Expand Down
4 changes: 2 additions & 2 deletions qiskit/circuit/library/boolean_logic/quantum_and.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AND(QuantumCircuit):
.. plot::
from qiskit.circuit.library import AND
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = AND(5)
_generate_circuit_library_visualization(circuit)
Expand All @@ -43,7 +43,7 @@ class AND(QuantumCircuit):
.. plot::
from qiskit.circuit.library import AND
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = AND(5, flags=[-1, 0, 0, 1, 1])
_generate_circuit_library_visualization(circuit)
Expand Down
4 changes: 2 additions & 2 deletions qiskit/circuit/library/boolean_logic/quantum_or.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class OR(QuantumCircuit):
.. plot::
from qiskit.circuit.library import OR
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = OR(5)
_generate_circuit_library_visualization(circuit)
Expand All @@ -44,7 +44,7 @@ class OR(QuantumCircuit):
.. plot::
from qiskit.circuit.library import OR
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = OR(5, flags=[-1, 0, 0, 1, 1])
_generate_circuit_library_visualization(circuit)
Expand Down
2 changes: 1 addition & 1 deletion qiskit/circuit/library/boolean_logic/quantum_xor.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def __init__(
.. plot::
from qiskit.circuit.library import XOR
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = XOR(5, seed=42)
_generate_circuit_library_visualization(circuit)
"""
Expand Down
2 changes: 1 addition & 1 deletion qiskit/circuit/library/fourier_checking.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def __init__(self, f: List[int], g: List[int]) -> None:
.. plot::
from qiskit.circuit.library import FourierChecking
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
f = [1, -1, -1, -1]
g = [1, 1, -1, -1]
circuit = FourierChecking(f, g)
Expand Down
2 changes: 1 addition & 1 deletion qiskit/circuit/library/generalized_gates/gms.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class GMS(QuantumCircuit):
.. plot::
from qiskit.circuit.library import GMS
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
import numpy as np
circuit = GMS(num_qubits=3, theta=[[0, np.pi/4, np.pi/8],
[0, 0, np.pi/2],
Expand Down
8 changes: 4 additions & 4 deletions qiskit/circuit/library/generalized_gates/gr.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class GR(QuantumCircuit):
.. plot::
from qiskit.circuit.library import GR
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
import numpy as np
circuit = GR(num_qubits=3, theta=np.pi/4, phi=np.pi/2)
_generate_circuit_library_visualization(circuit)
Expand Down Expand Up @@ -101,7 +101,7 @@ class GRX(GR):
.. plot::
from qiskit.circuit.library import GRX
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
import numpy as np
circuit = GRX(num_qubits=3, theta=np.pi/4)
_generate_circuit_library_visualization(circuit)
Expand Down Expand Up @@ -149,7 +149,7 @@ class GRY(GR):
.. plot::
from qiskit.circuit.library import GRY
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
import numpy as np
circuit = GRY(num_qubits=3, theta=np.pi/4)
_generate_circuit_library_visualization(circuit)
Expand Down Expand Up @@ -197,7 +197,7 @@ class GRZ(QuantumCircuit):
.. plot::
from qiskit.circuit.library import GRZ
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
import numpy as np
circuit = GRZ(num_qubits=3, phi=np.pi/2)
_generate_circuit_library_visualization(circuit)
Expand Down
2 changes: 1 addition & 1 deletion qiskit/circuit/library/generalized_gates/mcmt.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ class MCMTVChain(MCMT):
.. plot::
from qiskit.circuit.library import MCMTVChain, ZGate
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
from qiskit.visualization.library import _generate_circuit_library_visualization
circuit = MCMTVChain(ZGate(), 2, 2)
_generate_circuit_library_visualization(circuit.decompose())
Expand Down
Loading

0 comments on commit 6ca23b3

Please sign in to comment.