Skip to main content

LoweringContext

Struct LoweringContext 

Source
pub struct LoweringContext<'a> { /* private fields */ }
Expand description

One solve’s immutable model metadata and lazy expression decompositions.

Original IDs, expressions, bounds and activity flags are retained. Native ordering, capability checks and generated entities belong to the adapter. Create a fresh preparation after model or parameter changes. Resident solver handles should retain their native state, not this borrowed view.

Implementations§

Source§

impl<'a> LoweringContext<'a>

Source

pub fn new(model: &'a Model) -> Result<Self, SolverError>

Validate the objective declaration and capture the current parameter values.

§Errors

Returns a core error if neither an objective nor feasibility was declared.

Source

pub fn variables(&self) -> &[Variable]

Source

pub fn constraints(&self) -> &ModelConstraints<'a>

Source

pub fn objective(&self) -> Option<&Objective>

Source

pub fn kind(&self) -> ModelKind

Source

pub fn sense(&self) -> ObjectiveSense

Source

pub fn nonlinear_error( &self, expr: ExprId, location: impl Into<String>, ) -> SolverError

Explain an unsupported expression using original variable names.

Source

pub fn require_linear( &self, expr: ExprId, location: impl FnOnce() -> String, ) -> Result<AffineTerms<'_>, SolverError>

Require an affine expression.

§Errors

Returns a named nonlinear-expression error when extraction fails.

Source

pub fn require_linear_once( &self, expr: ExprId, location: impl FnOnce() -> String, ) -> Result<LinearTerms<'_>, SolverError>

Require an affine expression for a one-use streaming consumer.

This bypasses reuse admission and returns the expression crate’s native borrowed/owned representation. Prefer Self::require_linear when the same root is likely to be requested again during this preparation.

§Errors

Returns a lazily named nonlinear-expression error when extraction fails.

Source

pub fn require_quadratic( &self, expr: ExprId, location: impl FnOnce() -> String, ) -> Result<Extracted<QuadraticTerms>, SolverError>

Require a polynomial of degree at most two.

§Errors

Returns a named nonlinear-expression error when extraction fails.

Source

pub fn require_polynomial( &self, expr: ExprId, location: impl FnOnce() -> String, ) -> Result<PolynomialTerms<'_>, SolverError>

Require a polynomial while retaining the direct-affine borrowed path. Non-direct nodes are traversed once as quadratics, avoiding a failed affine pass before quadratic/SOC handling.

§Errors

Returns a lazily named nonlinear-expression error when extraction fails.

Source

pub fn detected_soc(&self, row: &Constraint) -> Option<SocForm>

An optional alternative, never a replacement for the original row.

Methods from Deref<Target = PreparedExpressions>§

Source

pub fn arena(&self) -> &ExprArena

Source

pub fn linear(&self, expr: ExprId) -> Option<AffineTerms<'_>>

Direct affine nodes retain their zero-copy path. Reused compound roots may be cached, including failed extractions, within this snapshot’s budget.

§Panics

Panics for an expression outside this arena or a poisoned cache.

Source

pub fn quadratic(&self, expr: ExprId) -> Option<Extracted<QuadraticTerms>>

Extract a quadratic polynomial, sharing terms only after observed reuse.

§Panics

Panics for an expression outside this arena or a poisoned cache.

Source

pub fn detected_soc( &self, variables: &[Variable], row: &Constraint, ) -> Option<SocForm>

Detect an optional cone representation using cached polynomial terms.

Source

pub fn explicit_soc(&self, soc: &SocConstraint) -> Result<SocForm, SolverError>

Extract an explicit cone in one streaming pass over its affine members.

§Errors

Returns a backend error for invalid affine cone members.

Methods from Deref<Target = ExprArena>§

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn get(&self, id: ExprId) -> &ExprNode

Source

pub fn nodes(&self) -> &[ExprNode]

Source

pub fn num_params(&self) -> usize

Source

pub fn param_value(&self, p: ParamId) -> f64

Current value bound to parameter p.

§Panics

Panics if p was not allocated by Self::new_param on this arena.

Source

pub fn try_param_value(&self, p: ParamId) -> Option<f64>

Look up the value of p, returning None if p is out of range.

Trait Implementations§

Source§

impl<'a> Debug for LoweringContext<'a>

Source§

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

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

impl Deref for LoweringContext<'_>

Source§

type Target = PreparedExpressions

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'a> !Freeze for LoweringContext<'a>

§

impl<'a> !RefUnwindSafe for LoweringContext<'a>

§

impl<'a> !Send for LoweringContext<'a>

§

impl<'a> !Sync for LoweringContext<'a>

§

impl<'a> !UnwindSafe for LoweringContext<'a>

§

impl<'a> Unpin for LoweringContext<'a>

§

impl<'a> UnsafeUnpin for LoweringContext<'a>

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> 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.