Skip to main content

DensityMatrixN

Struct DensityMatrixN 

Source
pub struct DensityMatrixN {
    pub dim: usize,
    pub entries: Vec<Complex>,
    /* private fields */
}
Expand description

Arbitrary-dimension density matrix (NxN, row-major). Pre-allocated scratch buffers for zero-allocation hot-path operations.

Fields§

§dim: usize§entries: Vec<Complex>

Implementations§

Source§

impl DensityMatrixN

Source

pub fn maximally_mixed(dim: usize) -> Self

Create the maximally mixed state I/N.

Source

pub fn pure_state(k: usize, dim: usize) -> Self

Create a pure state |k⟩⟨k|.

Source

pub fn equal_superposition(dim: usize) -> Self

Create an equal superposition: |ψ⟩ = (1/√N) Σ|k⟩ → ρ = |ψ⟩⟨ψ|.

Source

pub fn populations(&self) -> Vec<f32>

Diagonal populations (probabilities).

Source

pub fn coherence_magnitude(&self) -> f32

Sum of off-diagonal magnitudes (coherence).

Source

pub fn purity(&self) -> f32

Tr(ρ²) — purity. 1.0 = pure, 1/N = maximally mixed.

Source

pub fn von_neumann_entropy(&self) -> f32

Von Neumann entropy via eigenvalue decomposition. S = -Σ λ_i ln(λ_i) where λ_i are eigenvalues of ρ. Uses Jacobi rotation solver from dreamwell-math.

Source

pub fn free_energy(&self, energies: &[f32]) -> f32

Helmholtz free energy: F = ⟨H⟩ - T·S. H is given as diagonal energies. Temperature T = 1/(1 + φ·coherence_magnitude) — φ-scaled thermal partition. Higher coherence → lower temperature → free energy dominated by energy (ordered). Lower coherence → higher temperature → free energy dominated by entropy (disordered).

Source

pub fn dephase(&mut self, epsilon: f32)

Apply partial dephasing: ρ → (1-ε)ρ + εΔ(ρ).

Source

pub fn couple_dephase(&mut self, other: &DensityMatrixN, strength: f32)

Apply shared dephasing with another density matrix (Model 4 coupling).

Source

pub fn evolve(&mut self, unitary: &[Complex])

Unitary evolution: ρ → UρU†. Adaptive dispatch (Clean Compute: explicit hardware separation): dim < 32: serial cgemm (L1 cache, compiler vectorizes) dim ≥ 32: CPU parallel rows via rayon (no contention, scales with cores)

GPU compute (BA-60) is available via GpuTrainingContext::batched_evolve() for bulk operations where all matrices can be dispatched in a single submission. Per-call GPU dispatch is slower than CPU parallel due to Mutex serialization and buffer mapping overhead (~5ms per round-trip vs ~0.3ms for CPU cgemm_par at dim=86).

Source

pub fn hamiltonian_unitary(h: &[f32], dim: usize, dt: f32) -> Vec<Complex>

Build unitary U = exp(-iHdt) from a real symmetric Hamiltonian. Uses scaling-and-squaring with Padé approximant (numerically stable at any dim).

Source

pub fn born_sample(&self, seed: u64) -> usize

Born rule measurement: sample a mode index from diagonal populations.

Source

pub fn trace(&self) -> f32

Trace (should always be ~1.0 for valid density matrix).

Trait Implementations§

Source§

impl Clone for DensityMatrixN

Source§

fn clone(&self) -> DensityMatrixN

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,