boundlab.expr.Stack#

class boundlab.expr.Stack[source]#

Bases: Expr

Expression for stacking child expressions along a new dimension.

All children must have identical shapes. The backward pass produces an embed LinearOp per child that places the child at its index along the stacking dimension, with zeros elsewhere.

Methods

__init__

backward

Propagate weights to each child via unsqueeze+cat embed ops.

bound_width

Compute the width of the bounds for this expression.

center

Compute the center of the bounds for this expression.

diag

expand

flatten

flip

gather

get_const

Return the concrete tensor if self is a pure constant expression, else None.

jacobian_ops_

Recursively compute Jacobian ops for affine expressions.

lb

Compute a lower bound for this expression.

narrow

permute

repeat

reshape

roll

scatter

squeeze

tile

to_string

Return string representation with child strings substituted.

transpose

ub

Compute an upper bound for this expression.

ublb

Compute both an upper bound and a lower bound for this expression.

unflatten

unsqueeze

with_children

Return a new expression with the same type and flags but new children.

zeros_set

__init__(*children, dim=0)[source]#
property shape: torch.Size#

The shape of the output(s) produced by this expression.

property children: tuple[Expr, ...]#

The child expressions that serve as inputs to this expression.

with_children(*new_children)[source]#

Return a new expression with the same type and flags but new children.

backward(weights, direction='==')[source]#

Propagate weights to each child via unsqueeze+cat embed ops.

Parameters:
  • weights – A EinsumOp accumulated weight.

  • direction (Literal['>=', '<=', '==']) – Unused (Stack is always linear).

Returns:

(0, [child_weight_0, child_weight_1, ...])

to_string(*children_str)[source]#

Return string representation with child strings substituted.

property T: Expr#

Convenience for transpose of the last two dimensions.

__add__(other)#
__mul__(other)#

Element-wise multiplication (no broadcast).

bound_width()#

Compute the width of the bounds for this expression.

center()#

Compute the center of the bounds for this expression.

diag(diagonal=0)#
expand(*sizes)#
flatten(start_dim=0, end_dim=-1)#
flip(dims)#
gather(indices)#
get_const()#

Return the concrete tensor if self is a pure constant expression, else None.

Works for ConstVal and any AffineSum that has no symbolic children.

jacobian_ops_()#

Recursively compute Jacobian ops for affine expressions.

lb()#

Compute a lower bound for this expression.

narrow(dim, start, length)#
permute(*dims)#
repeat(*sizes)#
reshape(*shape)#
roll(shifts, dims)#
scatter(indices, output_shape)#
squeeze(dim=None)#
tile(*sizes)#
transpose(dim0, dim1)#
ub()#

Compute an upper bound for this expression.

ublb()#

Compute both an upper bound and a lower bound for this expression.

unflatten(dim, sizes)#
unsqueeze(dim)#
zeros_set(output_shape)#
id: int#

Unique identifier for the expression, used for topological sorting.

flags: ExprFlags#

Flags indicating expression properties for optimization.