Skip to main content

BooleanRow

Struct BooleanRow 

Source
pub struct BooleanRow {
    pub active: DecisionId,
    /* private fields */
}
Expand description

A sparse GF(2) row whose entries and availability are Boolean functions. Extra columns can carry witnesses through exactly the same row operations.

Fields§

§active: DecisionId

Decision under which this row is available.

Implementations§

Source§

impl BooleanRow

Source

pub fn probe_coefficients( &self, columns: &[usize], diagram: &mut BooleanDecisionDiagram, ) -> Result<Vec<DecisionId>, BooleanResourceError>

Query raw coefficients without expanding a deferred row. Results retain request order and duplicates, with zero for absent columns. Activation does not mask the values, including values outside the reachable domain. The row and its composed witness remain unchanged.

Returned decisions belong to diagram; retain them as roots if collecting before consuming them. No query cache or per-row expanded image is kept.

§Errors

Returns BooleanResourceError if querying exceeds cumulative work limits.

§Panics

Panics if a deferred row has no active witness tape.

Source

pub fn defer_coefficients( &mut self, diagram: &mut BooleanDecisionDiagram, ) -> Result<(), BooleanResourceError>

Move coefficients outside the tape’s common explicit partition into an immutable witness leaf. This preserves the raw off-activation values. A fresh core allocation releases the former full-support capacity.

§Errors

Returns BooleanResourceError if recording the witness exceeds configured limits.

§Panics

Panics if the row is already deferred or no witness tape is active.

Source

pub fn expand_coefficients( &mut self, diagram: &mut BooleanDecisionDiagram, ) -> Result<(), BooleanResourceError>

Restore every deferred coefficient before full-support iteration, mapping, or physical binding. No intermediate witness rows are expanded; use Self::probe_coefficients to query a subset without changing the row.

§Errors

Returns BooleanResourceError if reconstruction exceeds configured limits.

§Panics

Panics if a deferred row has no active witness tape.

Source§

impl BooleanRow

Source

pub fn new(active: DecisionId) -> Self

Creates an empty row available under active.

Source

pub fn from_terms( active: DecisionId, terms: impl IntoIterator<Item = (usize, DecisionId)>, ) -> Self

Build a row; repeated columns keep their last value, like set.

Source

pub fn terms(&self) -> &[(usize, DecisionId)]

Explicit nonzero coefficients in strictly increasing column order. Deferred witness coefficients are restored by expand_coefficients.

Source

pub fn into_terms(self) -> Vec<(usize, DecisionId)>

Consumes the row and returns its explicit coefficients.

§Panics

Panics if deferred coefficients have not been expanded.

Source

pub fn map_coefficients( &mut self, map: impl FnMut(DecisionId) -> Result<DecisionId, BooleanResourceError>, ) -> Result<(), BooleanResourceError>

Replace coefficients and remove terms that become zero.

§Errors

Returns the first BooleanResourceError produced by map.

§Panics

Panics if deferred coefficients have not been expanded.

Source

pub fn truncate_columns(&mut self, end: usize)

Discard auxiliary columns at and above end.

§Panics

Panics if deferred coefficients have not been expanded.

Source

pub fn decisions_mut(&mut self) -> impl Iterator<Item = &mut DecisionId>

Every decision owned by this row, for arena lifetime management.

Source

pub fn get(&self, column: usize) -> DecisionId

Query an explicit coefficient; deferred columns must not be constraints.

Source

pub fn set(&mut self, column: usize, value: DecisionId)

Sets one explicit coefficient, removing it when value is false.

§Panics

Panics if the row has deferred coefficients.

Source

pub fn xor_scaled( &mut self, other: &Self, factor: DecisionId, diagram: &mut BooleanDecisionDiagram, ) -> Result<(), BooleanResourceError>

XORs other into this row under the Boolean factor.

§Errors

Returns BooleanResourceError if row algebra exceeds configured limits.

§Panics

Panics if explicit coefficients are mixed with deferred witness rows.

Trait Implementations§

Source§

impl Clone for BooleanRow

Source§

fn clone(&self) -> BooleanRow

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 BooleanRow

Source§

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

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

impl Default for BooleanRow

Source§

fn default() -> Self

Returns the “default value” for a type. 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
§

impl<T, BorrowedSelf> BitwiseMutViaBorrow<BorrowedSelf> for T
where T: BorrowMut<BorrowedSelf>, BorrowedSelf: BitwiseMut + ?Sized,

§

fn assign_index(&mut self, index: usize, to: bool)

§

fn negate_index(&mut self, index: usize)

§

fn clear_bits(&mut self)

§

fn assign_random( &mut self, bit_count: usize, random_number_generator: &mut impl RngExt, )
where BorrowedSelf: BitLength,

§

impl<Bits, Other, BorrowedSelf, BorrowedOther> BitwisePairMutViaBorrow<Other, BorrowedSelf, BorrowedOther> for Bits
where Bits: BorrowMut<BorrowedSelf> + ?Sized, Other: Borrow<BorrowedOther> + ?Sized, BorrowedSelf: Bitwise + BitwisePairMut<BorrowedOther> + ?Sized, BorrowedOther: Bitwise + ?Sized,

§

fn assign(&mut self, other: &Other)

§

fn bitxor_assign(&mut self, other: &Other)

§

fn bitand_assign(&mut self, other: &Other)

§

fn bitor_assign(&mut self, other: &Other)

§

impl<T, Other, BorrowedSelf, BorrowedOther> BitwisePairViaBorrow<Other, BorrowedSelf, BorrowedOther> for T
where T: Borrow<BorrowedSelf> + ?Sized, Other: Borrow<BorrowedOther> + ?Sized, BorrowedSelf: Bitwise + BitwisePair<BorrowedOther> + ?Sized, BorrowedOther: Bitwise + ?Sized,

§

fn dot(&self, other: &Other) -> bool

§

fn and_weight(&self, other: &Other) -> usize

§

fn or_weight(&self, other: &Other) -> usize

§

fn xor_weight(&self, other: &Other) -> usize

§

impl<T, BorrowedSelf> BitwiseViaBorrow<BorrowedSelf> for T
where T: Borrow<BorrowedSelf>, BorrowedSelf: Bitwise + ?Sized,

§

fn index(&self, index: usize) -> bool

§

fn weight(&self) -> usize

§

fn parity(&self) -> bool

§

fn is_zero(&self) -> bool

§

fn is_unit(&self, index: usize) -> bool

§

fn support<'a>(&'a self) -> impl SortedIterator
where BorrowedSelf: 'a,

§

fn max_support(&self) -> Option<usize>

§

fn min_support(&self) -> Option<usize>

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, 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> 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.