Slice / gather / split operator bounds #
This file provides IBP and affine transfer rules for a small subset of indexing-like operations:
Slice: extract a contiguous range[start, stop)from a flattened vector,Gather: select entries by static indices (List Nat), andSplit: split a flattened vector into a list of parts.
Important limitation: this does not model tensor-valued index dtypes inside the differentiable
graph (i.e. no PyTorch-style LongTensor indexing/gather/scatter driven by data tensors).
def
NN.MLTheory.CROWN.Operators.Slice.getDimScalarFn
{α : Type}
{n : ℕ}
(t : Spec.Tensor α (Spec.Shape.dim n Spec.Shape.scalar))
:
Fin n → Spec.Tensor α Spec.Shape.scalar
View a (.dim n .scalar) tensor as its underlying Fin n → Tensor α .scalar function.
Instances For
def
NN.MLTheory.CROWN.Operators.Slice.ibpGather?
{α : Type}
[Context α]
(xB : FlatBox α)
(indices : List ℕ)
:
IBP for Gather: index into a vector using integer indices.
For input $x$ and a concrete index vector, the output satisfies $y_j=x_{\mathrm{indices}[j]}$. This is a permutation or selection.
Instances For
def
NN.MLTheory.CROWN.Operators.Slice.ibpSplit?.buildSplits
{α : Type}
[Context α]
(xB : FlatBox α)
(flo fhi : Fin xB.dim → Spec.Tensor α Spec.Shape.scalar)
(remaining : List ℕ)
(offset : ℕ)
:
Instances For
def
NN.MLTheory.CROWN.Operators.Slice.affSlice?
{α : Type}
[Context α]
{inDim outDim : ℕ}
(start sliceSize : ℕ)
(aff : AffineVec α inDim outDim)
:
Affine bounds for Slice: extract a subvector of an affine form.
If the input represents $y=Ax+c$, slicing selects the corresponding rows of $A$ and entries of $c$.