pub struct TensorNetwork { /* private fields */ }Expand description
A tensor network representation of a quantum state
Implementations§
Source§impl TensorNetwork
impl TensorNetwork
Sourcepub fn apply_gate(
&mut self,
gate_tensor: Tensor,
qubit_index: usize,
) -> QuantRS2Result<()>
pub fn apply_gate( &mut self, gate_tensor: Tensor, qubit_index: usize, ) -> QuantRS2Result<()>
Record a single-qubit gate application.
The gate tensor (rank 2, layout [out, in]) is appended to the ordered
gate list. It is later contracted into the state tensor by
Self::contract_to_statevector; nothing is fabricated here.
Sourcepub fn apply_two_qubit_gate(
&mut self,
gate_tensor: Tensor,
control_index: usize,
target_index: usize,
) -> QuantRS2Result<()>
pub fn apply_two_qubit_gate( &mut self, gate_tensor: Tensor, control_index: usize, target_index: usize, ) -> QuantRS2Result<()>
Record a two-qubit gate application.
The gate tensor (rank 4, layout [out_c, out_t, in_c, in_t]) and the
[control, target] qubit pair are appended to the ordered gate list for
later contraction into the state tensor.
Sourcepub fn contract_to_statevector(&self) -> QuantRS2Result<Vec<Complex64>>
pub fn contract_to_statevector(&self) -> QuantRS2Result<Vec<Complex64>>
Contract the entire network to produce the final state vector.
This performs a genuine tensor contraction: the state is held as a rank-N
tensor (N = number of qubits, every index of dimension 2) initialized to
|0…0⟩, and each recorded gate tensor is contracted into it in
application order (a sequential contraction path). The resulting amplitudes
are read out in the crate-standard little-endian basis (qubit q occupies
bit q of the flat index), so the output matches the state-vector
simulator exactly. No circuit-type heuristics or canned states are used —
the actual gate matrices and qubit indices fully determine the result.
Trait Implementations§
Source§impl Clone for TensorNetwork
impl Clone for TensorNetwork
Source§fn clone(&self) -> TensorNetwork
fn clone(&self) -> TensorNetwork
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl ContractableNetwork for TensorNetwork
impl ContractableNetwork for TensorNetwork
Source§fn contract_tensors(
&mut self,
tensor_id1: usize,
tensor_id2: usize,
) -> QuantRS2Result<usize>
fn contract_tensors( &mut self, tensor_id1: usize, tensor_id2: usize, ) -> QuantRS2Result<usize>
Genuinely contract the two referenced tensors, replacing them with their contraction over any shared bonds (or their outer product if they share none) and returning the ID of the merged tensor.
Source§fn optimize_contraction_order(&mut self) -> QuantRS2Result<()>
fn optimize_contraction_order(&mut self) -> QuantRS2Result<()>
Compute and cache a greedy contraction order over the current network.
This runs the real greedy path optimizer
(contraction::calculate_greedy_contraction_path) and stores the result
for reuse; it is no longer a no-op placeholder.
Auto Trait Implementations§
impl Freeze for TensorNetwork
impl RefUnwindSafe for TensorNetwork
impl Send for TensorNetwork
impl Sync for TensorNetwork
impl Unpin for TensorNetwork
impl UnsafeUnpin for TensorNetwork
impl UnwindSafe for TensorNetwork
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.