Skip to main content

SpatialQuality

Struct SpatialQuality 

Source
pub struct SpatialQuality {
    pub evr: f64,
    pub cap_areas: Vec<f64>,
    pub exclusivities: Vec<f64>,
    pub voronoi_cells: Vec<VoronoiCell>,
    pub pairwise_intersections: HashMap<(usize, usize), f64>,
    pub coverage: CoverageReport,
    pub bridge_threshold: f64,
    pub bridge_quality_matrix: Vec<Vec<f64>>,
}
Expand description

Pre-computed spatial properties of the category layout on S².

Every field here is derived from the category centroids and angular spreads — no embedding-space information, pure sphere geometry. This struct is computed once during CategoryLayer::build() and informs bridge detection, edge weights, and confidence scoring.

Fields§

§evr: f64

Global explained variance ratio of the projection.

§cap_areas: Vec<f64>

Solid angle of each category’s cap (2π(1 − cos α)).

§exclusivities: Vec<f64>

Per-category exclusivity: fraction of cap not overlapped by any other. 1.0 = isolated, 0.0 = completely overlapped.

§voronoi_cells: Vec<VoronoiCell>

Voronoi cell for each category (area + neighbor indices).

§pairwise_intersections: HashMap<(usize, usize), f64>

Pairwise cap intersection areas in steradians, keyed by (min(i, j), max(i, j)). Only pairs with measurable overlap (> 1e-15 sr) are stored, keeping the map sparse.

§coverage: CoverageReport

Coverage report: what fraction of S² is claimed by any category.

§bridge_threshold: f64

EVR-adaptive bridge threshold. Higher EVR → looser threshold. Formula: 0.5 + (1 − EVR)² × 0.4

§bridge_quality_matrix: Vec<Vec<f64>>

C×C matrix of spatially-adjusted bridge quality between category pairs. matrix[i][j] = max_bridge_strength(i,j) × territorial_factor(i,j). Empty until Self::set_bridge_quality_matrix is called with a built CategoryGraph (done during CategoryLayer::build).

Implementations§

Source§

impl SpatialQuality

Source

pub fn compute( centroids: &[SphericalPoint], half_angles: &[f64], evr: f64, ) -> Self

👎Deprecated:

use compute_with_config; this uses PipelineConfig::default() sample counts

Compute spatial quality from category centroids and angular spreads, using the legacy default Monte Carlo sample counts.

Source

pub fn compute_with_config( centroids: &[SphericalPoint], half_angles: &[f64], evr: f64, config: &PipelineConfig, ) -> Self

Compute spatial quality using configurable sample counts and bridge threshold parameters.

Cost at default sample counts: ~100-200ms for 31 categories. This is a one-time build cost, not per-query.

Source

pub fn set_bridge_quality_matrix(&mut self, graph: &CategoryGraph)

Populate the C×C bridge_quality_matrix from a freshly built graph.

Each cell is edge.max_bridge_strength × territorial_factor(i, j), left at 0.0 where no edge exists (including the diagonal).

Source

pub fn territorial_factor(&self, cat_a: usize, cat_b: usize) -> f64

Exclusivity-based territorial factor for a category pair.

Bridges between categories that heavily overlap (low exclusivity) are discounted — they’re shared territory, not genuine connectors. Returns a value in (0, 1].

Source

pub fn are_voronoi_neighbors(&self, cat_a: usize, cat_b: usize) -> bool

Whether two categories are Voronoi neighbors (geometrically adjacent on S²).

Source

pub fn voronoi_area(&self, cat: usize) -> f64

Voronoi cell area for a category.

Source

pub fn territorial_efficiency(&self, cat: usize, item_count: usize) -> f64

Territorial efficiency: items per steradian of Voronoi cell.

Source

pub fn intersection_area(&self, cat_a: usize, cat_b: usize) -> f64

Cap intersection area between two categories.

Trait Implementations§

Source§

impl Clone for SpatialQuality

Source§

fn clone(&self) -> SpatialQuality

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 SpatialQuality

Source§

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

Formats the value using the given formatter. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more