Skip to main content

QuantumDebugger

Struct QuantumDebugger 

Source
pub struct QuantumDebugger<const N: usize> { /* private fields */ }
Expand description

Main quantum algorithm debugger

Implementations§

Source§

impl<const N: usize> QuantumDebugger<N>

Source

pub fn new(config: DebugConfig) -> Result<Self>

Create a new quantum debugger

Source

pub fn load_circuit(&mut self, circuit: Circuit<N>) -> Result<()>

Load a circuit for debugging

Source

pub fn reset(&mut self)

Reset debugger state

Source

pub fn add_breakpoint(&mut self, condition: BreakCondition)

Add a breakpoint

Source

pub fn remove_breakpoint(&mut self, index: usize) -> Result<()>

Remove a breakpoint

Source

pub fn add_watchpoint(&mut self, watchpoint: Watchpoint)

Add a watchpoint

Source

pub fn remove_watchpoint(&mut self, id: &str) -> Result<()>

Remove a watchpoint

Source

pub fn step(&mut self) -> Result<StepResult>

Execute the circuit step by step

Source

pub fn run(&mut self) -> Result<StepResult>

Run until next breakpoint or completion

Source

pub fn get_current_state(&self) -> Result<Array1<Complex64>>

Get current quantum state

Returns the full 2^N amplitude vector after the gates that have been executed so far (self.current_gate gates from the loaded circuit).

The state is reconstructed by replaying the executed prefix of the circuit through the embedded StateVectorSimulator. This always reflects the real amplitudes; if no circuit is loaded, the simulator is in the initial |0…0⟩ state, which is returned as a genuine state vector (amplitude 1 on the zero basis state) rather than a fabricated all-zero vector.

Source

pub fn get_entanglement_entropy(&self, cut: usize) -> Result<f64>

Get entanglement entropy at the specified bipartition cut.

The cut splits the qubits into two contiguous groups; cut is the number of qubits on one side of the partition. The von Neumann entropy (in nats, consistent with the MPS path) of the reduced density matrix is returned.

Both the state-vector and MPS backends are handled through Self::get_current_state, which yields the genuine amplitudes for the current step (the MPS backend is contracted to a state vector via its to_statevector method). This computes the real entropy in every case rather than returning a placeholder.

Source

pub fn get_pauli_expectation(&self, pauli_string: &str) -> Result<Complex64>

Get expectation value of Pauli observable

Source

pub const fn get_metrics(&self) -> &PerformanceMetrics

Get performance metrics

Source

pub const fn get_snapshots(&self) -> &VecDeque<ExecutionSnapshot>

Get all snapshots

Source

pub fn get_watchpoint(&self, id: &str) -> Option<&Watchpoint>

Get watchpoint by ID

Source

pub const fn get_watchpoints(&self) -> &HashMap<String, Watchpoint>

Get all watchpoints

Source

pub const fn is_finished(&self) -> bool

Check if execution is finished

Source

pub const fn is_paused(&self) -> bool

Check if execution is paused

Source

pub const fn get_execution_state(&self) -> &ExecutionState

Get current execution state

Source

pub fn generate_report(&self) -> DebugReport

Generate debugging report

Auto Trait Implementations§

§

impl<const N: usize> !Freeze for QuantumDebugger<N>

§

impl<const N: usize> !RefUnwindSafe for QuantumDebugger<N>

§

impl<const N: usize> !UnwindSafe for QuantumDebugger<N>

§

impl<const N: usize> Send for QuantumDebugger<N>
where Option<Circuit<N>>: Send,

§

impl<const N: usize> Sync for QuantumDebugger<N>
where Option<Circuit<N>>: Sync,

§

impl<const N: usize> Unpin for QuantumDebugger<N>
where Option<Circuit<N>>: Unpin,

§

impl<const N: usize> UnsafeUnpin for QuantumDebugger<N>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V