pub struct TransitionMatrix {
pub row_pointers: Vec<u32>,
pub data: Vec<[u32; 2]>,
pub max_branches: Vec<u32>,
pub num_nodes: u32,
pub vocab_size: u32,
pub sid_length: u32,
}Expand description
Stacked CSR transition matrix: interleaves [col_idx, next_state] for coalesced reads. Row i corresponds to trie node i; values are (token_id, next_node_id) pairs.
Fields§
§row_pointers: Vec<u32>CSR row pointers: length = num_nodes + 1.
row_pointers[i]..row_pointers[i+1] is the slice in data for node i.
data: Vec<[u32; 2]>Interleaved pairs: [(token_id, next_node_id), …]
max_branches: Vec<u32>Max observed branch factor at each trie depth: length = sid_length.
num_nodes: u32Total number of trie nodes (states).
vocab_size: u32Vocabulary size |V|.
sid_length: u32Semantic ID length L.
Implementations§
Source§impl TransitionMatrix
impl TransitionMatrix
Sourcepub fn new(num_nodes: u32, vocab_size: u32, sid_length: u32) -> Self
pub fn new(num_nodes: u32, vocab_size: u32, sid_length: u32) -> Self
Construct an empty matrix for num_nodes nodes.
Sourcepub fn children(&self, node: u32) -> &[[u32; 2]]
pub fn children(&self, node: u32) -> &[[u32; 2]]
Returns the children slice for node as &[[token_id, next_node]; _].
§Panics
Panics if node >= num_nodes.
Sourcepub fn next_node(&self, node: u32, token: u32) -> Option<u32>
pub fn next_node(&self, node: u32, token: u32) -> Option<u32>
Looks up the next node reached from node by emitting token.
Returns None if the transition does not exist (invalid / masked).
Sourcepub fn is_leaf(&self, node: u32) -> bool
pub fn is_leaf(&self, node: u32) -> bool
Returns true if node has no outgoing transitions (i.e. is a leaf).
Sourcepub fn check_invariants(&self) -> Result<(), String>
pub fn check_invariants(&self) -> Result<(), String>
Validates internal invariants; useful inside debug_assert!.
Source§impl TransitionMatrix
impl TransitionMatrix
Sourcepub fn vntk(&self, current_nodes: &[u32], level: usize) -> VntkResult
pub fn vntk(&self, current_nodes: &[u32], level: usize) -> VntkResult
Vectorized Node Transition Kernel — Algorithm 2 from the paper.
For each of the n = batch_size × beam_width active beams, reads the
CSR row for that beam’s current trie node and writes up to B_t
(token, next-node) pairs into pre-allocated output buffers.
§Layout
All output buffers are flat and strided by branch_size (= B_t).
§Parallelism
The per-beam inner loop is embarrassingly parallel and runs via Rayon. Writes to disjoint buffer slices avoid any synchronisation overhead.
§Arguments
current_nodes— flat slice of lengthn, one node ID per beamlevel— current decoding step (0-indexed); selectsB_t
§Panics
Panics if level >= sid_length or any node ID ≥ num_nodes.
Sourcepub fn vntk_single(&self, node: u32, level: usize) -> VntkOutput
pub fn vntk_single(&self, node: u32, level: usize) -> VntkOutput
Thin wrapper that converts a VntkResult into the simpler VntkOutput
expected by the test module (next_nodes flat vec + single bool mask).
Only meaningful when current_nodes contains a single beam; for
multi-beam callers use VntkResult directly.
Trait Implementations§
Source§impl Clone for TransitionMatrix
impl Clone for TransitionMatrix
Source§fn clone(&self) -> TransitionMatrix
fn clone(&self) -> TransitionMatrix
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TransitionMatrix
impl Debug for TransitionMatrix
Source§impl Display for TransitionMatrix
impl Display for TransitionMatrix
Source§impl PartialEq for TransitionMatrix
impl PartialEq for TransitionMatrix
impl Eq for TransitionMatrix
impl StructuralPartialEq for TransitionMatrix
Auto Trait Implementations§
impl Freeze for TransitionMatrix
impl RefUnwindSafe for TransitionMatrix
impl Send for TransitionMatrix
impl Sync for TransitionMatrix
impl Unpin for TransitionMatrix
impl UnsafeUnpin for TransitionMatrix
impl UnwindSafe for TransitionMatrix
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
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 more