Skip to content

QuantumIntensity

Bases: NumpyModel

Represents an intensity signal.

Source code in src/qiskit_mps_initializer/datatypes/quantum_intensity.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class QuantumIntensity(pdnm.NumpyModel):
    """Represents an intensity signal."""

    state: QuantumState
    """The quantum state corresponding to this intensity signal."""

    alpha: float
    """The alpha parameter of the intensity signal."""

    @classmethod
    def from_dense_data(cls, data: npt.ArrayLike) -> "QuantumIntensity":
        """Initializes a QuantumIntensity from the given dense data."""
        converted_data = np.array(data, dtype=np.float64)
        alpha, state_data = extract_alpha_and_state_from_intensity_signal(converted_data)
        state = QuantumState.from_dense_data(data=state_data, normalize=False)

        return cls(state=state, alpha=alpha)

    @pd.computed_field
    @property
    def wavefunction(self) -> pdnt.Np1DArrayComplex128:
        """The normalized wavefunction of the quantum state."""
        return self.state.wavefunction

    @pd.computed_field
    @property
    def size(self) -> int:
        """The dimension of the quantum state."""
        return self.state.wavefunction.size

    @pd.computed_field
    @property
    def num_qubits(self) -> int:
        """The number of qubits required to represent the quantum state."""
        return self.state.num_qubits

    def generate_mps_initializer_circuit(
        self, number_of_layers: int
    ) -> qiskit.circuit.QuantumCircuit:
        """Generates the MPS initializer circuit for the quantum state."""
        return self.state.generate_mps_initializer_circuit(number_of_layers)

    # multiplication with a scalar can be defined straightforwardly
    def __mul__(self, other: int | float) -> "QuantumIntensity":
        """Defines the multiplication of the QuantumIntensity with a scalar."""
        if isinstance(other, int | float):  # type: ignore
            new_state = QuantumIntensity(state=self.state, alpha=self.alpha * other)
            return new_state
        else:
            raise ValueError("Multiplication is only defined for scalars.")

state instance-attribute

state: QuantumState

The quantum state corresponding to this intensity signal.

alpha instance-attribute

alpha: float

The alpha parameter of the intensity signal.

wavefunction property

wavefunction: Np1DArrayComplex128

The normalized wavefunction of the quantum state.

size property

size: int

The dimension of the quantum state.

num_qubits property

num_qubits: int

The number of qubits required to represent the quantum state.

from_dense_data classmethod

from_dense_data(data: ArrayLike) -> QuantumIntensity

Initializes a QuantumIntensity from the given dense data.

Source code in src/qiskit_mps_initializer/datatypes/quantum_intensity.py
25
26
27
28
29
30
31
32
@classmethod
def from_dense_data(cls, data: npt.ArrayLike) -> "QuantumIntensity":
    """Initializes a QuantumIntensity from the given dense data."""
    converted_data = np.array(data, dtype=np.float64)
    alpha, state_data = extract_alpha_and_state_from_intensity_signal(converted_data)
    state = QuantumState.from_dense_data(data=state_data, normalize=False)

    return cls(state=state, alpha=alpha)

generate_mps_initializer_circuit

generate_mps_initializer_circuit(
    number_of_layers: int,
) -> QuantumCircuit

Generates the MPS initializer circuit for the quantum state.

Source code in src/qiskit_mps_initializer/datatypes/quantum_intensity.py
52
53
54
55
56
def generate_mps_initializer_circuit(
    self, number_of_layers: int
) -> qiskit.circuit.QuantumCircuit:
    """Generates the MPS initializer circuit for the quantum state."""
    return self.state.generate_mps_initializer_circuit(number_of_layers)