boundlab.Zeros#
- class boundlab.Zeros[source]#
Bases:
ExprThe empty sum: exactly the all-zeros value.
The identity for
addand the result of splitting off a class that is not present. Kept distinct fromBias(0)so structural checks (classset() == set()) can recognize it.Methods
Bound on the magnitude: \(\max(|lb|, ub) \ge \sup |x|\).
Same-class addition;
__add__dispatches here when classes match and otherwise groups the addends in anExprGroup.Center/halfwidth form:
c = (ub + lb) / 2,w = (ub - lb) / 2.The set of component classes present in this value.
Hook: build an instance of
clsrepresenting exactlyexpr, orNonewhen this class cannot.Hook: convert
selfintoexpr_type, orNonewhen this class does not know how.Apply the linear map described by an integer-label einsum.
Lift a tensor/scalar into a broadcast
Bias; passExprthrough.Sound elementwise lower bound on every concrete value represented.
(lb, ub)in one call; components override it when computing both at once is cheaper than two passes.Split into
(matching, rest)so thatmatching + rest == self.Convert to another component class, exactly.
Collapse to the box hull
Bias(c) + Noise(w).Diagnostics as a
TensorFormat.Sound elementwise upper bound on every concrete value represented.
- property shape_dtype: ShapeDtype#
Allocation-free
(shape, dtype)metadata of the value.
- einsum(subscripts, *operands)[source]#
Apply the linear map described by an integer-label einsum.
subscriptsholds one label tuple per input followed by the output labels (seeboundlab.utils.einsum_parser()). This is the single linear primitive:__mul__,__matmul__,sumandmeanall lower to it, so implementing it soundly makes every derived linear operation sound.
- add(other)[source]#
Same-class addition;
__add__dispatches here when classes match and otherwise groups the addends in anExprGroup.
- __add__(other)#
- __mul__(other)#
- absub()#
Bound on the magnitude: \(\max(|lb|, ub) \ge \sup |x|\).
- chw()#
Center/halfwidth form:
c = (ub + lb) / 2,w = (ub - lb) / 2.
- classset()#
The set of component classes present in this value.
A single component reports
{type(self)}, anExprGroupits member classes, andZerosthe empty set. Handlers use this to decide which part of a value they know how to transform.
- classmethod convert_from(expr)#
Hook: build an instance of
clsrepresenting exactlyexpr, orNonewhen this class cannot. One half ofto().
- convert_to(expr_type)#
Hook: convert
selfintoexpr_type, orNonewhen this class does not know how. The other half ofto().
- static from_exprlike(expr, shape)#
Lift a tensor/scalar into a broadcast
Bias; passExprthrough.
- lbub()#
(lb, ub)in one call; components override it when computing both at once is cheaper than two passes.
- matmul(other)#
- mean(axis, keepdims=False)#
- numel()#
- rmatmul(other)#
- split(ty)#
Split into
(matching, rest)so thatmatching + rest == self.The main way handlers peel off the component class they transform while passing the remainder through untouched.
- squeeze(axes=None)#
- sum(axis, keepdims=False)#
- to(expr_type)#
Convert to another component class, exactly.
Identity short-circuits; otherwise the target’s
convert_fromis tried, then this class’sconvert_to. RaisesTypeErrorwhen neither side knows the conversion — conversions never approximate.
- to_intervals(name='')#
Collapse to the box hull
Bias(c) + Noise(w).Sound but lossy: every correlation between error symbols is dropped, so downstream cancellation (
x - x = 0) no longer happens.
- torch_print(group='reason')#
Diagnostics as a
TensorFormat.The result is safe to hand to
Torch diagnostic outputunder tracing: only plain arrays cross the callback boundary, never expression metadata (which may hold tracers, e.g. reason weights).
- unsqueeze(axes)#