Skip to main content

GammaMatrix

Struct GammaMatrix 

Source
pub struct GammaMatrix { /* private fields */ }

Implementations§

Source§

impl GammaMatrix

Source

pub fn release_stats(&mut self)

Drop the sufficient-stat planes (a_stat / b_stat) after calibration, keeping only the posterior estimates. Use when the consumer reads posterior means / log-means but never posterior_sample (which is the only reader of a_stat/b_stat). Halves the resident footprint of a calibrated parameter.

Source

pub fn sparsify_mean_to_support(&mut self, numerator: &DMatrix<f32>)

Zero every estimated_mean entry whose corresponding numerator is zero, collapsing the per-column Gamma prior baseline (a0/denom, present at every unobserved cell) to exact zero. This lets a downstream triplet-ization of the mean be sparse — only the observed support survives. It’s the lossy-but-correct choice for count-based consumers (the baseline is a regularization floor, not signal). numerator must match the mean’s shape; only meaningful after a mean calibration.

Source

pub fn has_data_support(&self, row: usize, col: usize) -> bool

Whether the posterior at (row, col) carries any data beyond the prior: a_stat > a0. The read-only counterpart of Self::sparsify_mean_to_support, for consumers that serialize the mean without owning the numerator — an unsupported entry’s mean is the prior floor a0 / (b0 + denom), which is regularization, not signal. Writing those floors out turns a sparse posterior dense: a carried pseudobulk reference measured 100.0% dense (34M of 34M entries) before its writer checked this.

Source

pub fn evidence_mean(&self, row: usize, col: usize) -> f32

The unregularized rate at (row, col): (a_stat − a0) / (b_stat − b0) — data sum over data denominator, no prior in either. Zero when the entry has no data support.

This is what a serialized posterior should usually store: paired with its denominator, it is a bijection of the sufficient statistics, so a consumer reconstructs a_stat/b_stat exactly. The posterior mean (a0 + sum)/(b0 + n) is the right estimate but the wrong carrier — its prior shrinkage (1.85× at sum = 1, n = 12) gets re-ingested as if it were data, and a second posterior forms around an already-shrunk value.

Source

pub fn with_row_prior( dims: (usize, usize), a0: &DVector<f32>, b0: &DVector<f32>, ) -> Self

A matrix whose row d has prior Gamma(a0[d], b0[d]). The statistics start at the prior, as with TwoStatParam::new.

Source

pub fn set_row_prior(&mut self, a0: &DVector<f32>, b0: &DVector<f32>)

Replace the per-row prior. Accumulated statistics are left as they are; the new prior applies at the next reset_stat / update_stat.

Source

pub fn row_prior(&self) -> Option<(&DVector<f32>, &DVector<f32>)>

The per-row prior, if one is set.

Source

pub fn vconcat(blocks: Vec<GammaMatrix>, stack_stats: bool) -> Self

Row-stack per-feature-block parameters (from a gene-blocked fit) into one [Σrowsᵢ × K] parameter. All blocks must share the column count and either share the scalar hyper-params or all carry a row prior, in which case the row priors are concatenated. Calibrated planes present in the first block are stacked; lazily-empty planes stay empty. stack_stats controls whether a_stat/b_stat are carried through — pass false when the output only needs posterior estimates, so the heavy sufficient-stat planes are never assembled at full width.

Trait Implementations§

Source§

impl Clone for GammaMatrix

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for GammaMatrix

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Inference for GammaMatrix

Source§

type Mat = Matrix<f32, Dyn, Dyn, VecStorage<f32, Dyn, Dyn>>

Source§

type Scalar = f32

Source§

fn posterior_mean(&self) -> &Self::Mat

Source§

fn posterior_sd(&self) -> &Self::Mat

Source§

fn posterior_log_mean(&self) -> &Self::Mat

Source§

fn posterior_log_sd(&self) -> &Self::Mat

Source§

fn posterior_sample(&self) -> Result<Self::Mat>

Source§

fn posterior_log_sample(&self, seed: u64) -> Result<Self::Mat>

Draw a fresh sample of log λ per element. Delta-method approximation: log λ ≈ Normal(posterior_log_mean, posterior_log_sd²). Caller must have called calibrate_with(CalibrateTarget::All) first so log_mean / log_sd are populated. Read more
Source§

fn nrows(&self) -> usize

Source§

fn ncols(&self) -> usize

Source§

impl ParamIo for GammaMatrix

Source§

type Mat = Matrix<f32, Dyn, Dyn, VecStorage<f32, Dyn, Dyn>>

Source§

fn to_tsv(&self, header: &str) -> Result<()>

Source§

fn to_melted_parquet( &self, file_path: &str, row_names: (Option<&[Box<str>]>, Option<&str>), column_names: (Option<&[Box<str>]>, Option<&str>), ) -> Result<()>

Source§

fn to_parquet(&self, file_path: &str) -> Result<()>

Write to parquet with default names
Source§

impl TwoStatParam for GammaMatrix

Source§

type Mat = Matrix<f32, Dyn, Dyn, VecStorage<f32, Dyn, Dyn>>

Source§

type Scalar = f32

Source§

fn new(dims: (usize, usize), a: Self::Scalar, b: Self::Scalar) -> Self

Source§

fn add_stat(&mut self, add_a: &Self::Mat, add_b: &Self::Mat)

Source§

fn update_stat(&mut self, update_a: &Self::Mat, update_b: &Self::Mat)

Source§

fn reset_stat(&mut self)

Source§

fn update_stat_col( &mut self, update_a: &Self::Mat, update_b: &Self::Mat, k: usize, )

Source§

fn map_calibrate_mean(&mut self)

Source§

fn map_calibrate_sd(&mut self)

Source§

fn map_calibrate_log_mean(&mut self)

Source§

fn map_calibrate_log_sd(&mut self)

Source§

fn calibrate(&mut self)

Calibrate all posterior quantities (mean, sd, log_mean, log_sd)
Source§

fn calibrate_with(&mut self, target: CalibrateTarget)

Calibrate only the posterior quantities specified by target.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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> 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> ErasedDestructor for T
where T: 'static,

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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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