Documentation
¶
Overview ¶
Package compute implements tensor computation engines and operations.
Index ¶
- type CPUEngine
- func (e *CPUEngine[T]) Add(ctx context.Context, a, b *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) AddScalar(_ context.Context, a *tensor.TensorNumeric[T], scalar T, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Concat(_ context.Context, tensors []*tensor.TensorNumeric[T], axis int, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Copy(_ context.Context, dst, src *tensor.TensorNumeric[T]) error
- func (e *CPUEngine[T]) Div(_ context.Context, a, b *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) DivScalar(_ context.Context, a *tensor.TensorNumeric[T], scalar T, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Exp(_ context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Fill(_ context.Context, t *tensor.TensorNumeric[T], value T) error
- func (e *CPUEngine[T]) Gather(_ context.Context, params *tensor.TensorNumeric[T], ...) error
- func (e *CPUEngine[T]) Log(_ context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) MatMul(_ context.Context, a, b *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Mul(ctx context.Context, a, b *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) MulScalar(_ context.Context, a *tensor.TensorNumeric[T], scalar T, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) OneHot(_ context.Context, input *tensor.TensorNumeric[int], depth int, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Ops() numeric.Arithmetic[T]
- func (e *CPUEngine[T]) Pow(ctx context.Context, base, exponent *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) RandomUniform(_ context.Context, t *tensor.TensorNumeric[T], minVal, maxVal T) error
- func (e *CPUEngine[T]) ReduceMean(ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) ReduceSum(ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Repeat(_ context.Context, a *tensor.TensorNumeric[T], axis int, repetitions int, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Reshape(_ context.Context, a *tensor.TensorNumeric[T], shape []int, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Rsqrt(ctx context.Context, a *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) ScatterAdd(_ context.Context, dEmbeddingTable *tensor.TensorNumeric[T], ...) error
- func (e *CPUEngine[T]) Softmax(_ context.Context, a *tensor.TensorNumeric[T], axis int, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Split(_ context.Context, a *tensor.TensorNumeric[T], numSplits int, axis int) ([]*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Sqrt(ctx context.Context, a *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Sub(ctx context.Context, a, b *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Sum(_ context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Tanh(ctx context.Context, a *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) TanhPrime(ctx context.Context, a, upstream *tensor.TensorNumeric[T], ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Transpose(_ context.Context, a *tensor.TensorNumeric[T], axes []int, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) UnaryOp(_ context.Context, a *tensor.TensorNumeric[T], op func(T) T, ...) (*tensor.TensorNumeric[T], error)
- func (e *CPUEngine[T]) Zero(_ context.Context, a *tensor.TensorNumeric[T]) error
- func (e *CPUEngine[T]) Zeros(ctx context.Context, a *tensor.TensorNumeric[T], shape []int) error
- type Engine
- type FailableTensor
- type FailableZeroer
- type TestableEngine
- func (e *TestableEngine[T]) TestableMatMul(_ context.Context, a, b *tensor.TensorNumeric[T], result *FailableTensor[T]) error
- func (e *TestableEngine[T]) TestableSum(ctx context.Context, a *tensor.TensorNumeric[T], axis int, _ bool, ...) error
- func (e *TestableEngine[T]) TestableTranspose(_ context.Context, a *tensor.TensorNumeric[T], result *FailableTensor[T]) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CPUEngine ¶
CPUEngine is a CPU-based implementation of the Engine interface.
func NewCPUEngine ¶
func NewCPUEngine[T tensor.Numeric](ops numeric.Arithmetic[T]) *CPUEngine[T]
NewCPUEngine constructs a new CPUEngine for the given numeric operations.
func (*CPUEngine[T]) Add ¶
func (e *CPUEngine[T]) Add(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Add performs element-wise addition with broadcasting.
func (*CPUEngine[T]) AddScalar ¶
func (e *CPUEngine[T]) AddScalar(_ context.Context, a *tensor.TensorNumeric[T], scalar T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
AddScalar performs element-wise addition of a tensor by a scalar.
func (*CPUEngine[T]) Concat ¶
func (e *CPUEngine[T]) Concat(_ context.Context, tensors []*tensor.TensorNumeric[T], axis int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Concat concatenates a list of tensors along a given axis.
func (*CPUEngine[T]) Div ¶
func (e *CPUEngine[T]) Div(_ context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Div performs element-wise division with broadcasting. For integer types, division by zero returns an error.
func (*CPUEngine[T]) DivScalar ¶
func (e *CPUEngine[T]) DivScalar(_ context.Context, a *tensor.TensorNumeric[T], scalar T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
DivScalar divides a tensor by a scalar value element-wise.
func (*CPUEngine[T]) Exp ¶
func (e *CPUEngine[T]) Exp(_ context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Exp computes the element-wise exponential of a tensor.
func (*CPUEngine[T]) Gather ¶
func (e *CPUEngine[T]) Gather(_ context.Context, params *tensor.TensorNumeric[T], indices *tensor.TensorNumeric[int], output *tensor.TensorNumeric[T]) error
Gather performs an embedding-style gather. params must be 2D [vocab, dim]. indices may be 1D [N] or 2D [batch, seq]. output must be [indices..., dim], i.e., [N, dim] or [batch, seq, dim].
func (*CPUEngine[T]) Log ¶
func (e *CPUEngine[T]) Log(_ context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Log computes the element-wise natural logarithm of a tensor.
func (*CPUEngine[T]) MatMul ¶
func (e *CPUEngine[T]) MatMul(_ context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
MatMul performs matrix multiplication of two tensors.
func (*CPUEngine[T]) Mul ¶
func (e *CPUEngine[T]) Mul(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Mul performs element-wise multiplication with broadcasting.
func (*CPUEngine[T]) MulScalar ¶
func (e *CPUEngine[T]) MulScalar(_ context.Context, a *tensor.TensorNumeric[T], scalar T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
MulScalar performs element-wise multiplication of a tensor by a scalar.
func (*CPUEngine[T]) OneHot ¶
func (e *CPUEngine[T]) OneHot(_ context.Context, input *tensor.TensorNumeric[int], depth int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
OneHot creates a one-hot encoding of the input tensor.
func (*CPUEngine[T]) Ops ¶
func (e *CPUEngine[T]) Ops() numeric.Arithmetic[T]
Ops returns the arithmetic ops for this engine.
func (*CPUEngine[T]) Pow ¶
func (e *CPUEngine[T]) Pow( ctx context.Context, base, exponent *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error)
Pow raises each element of a tensor to the power of the corresponding element in another tensor.
func (*CPUEngine[T]) RandomUniform ¶
func (e *CPUEngine[T]) RandomUniform(_ context.Context, t *tensor.TensorNumeric[T], minVal, maxVal T) error
RandomUniform fills t with random values between minVal and maxVal.
func (*CPUEngine[T]) ReduceMean ¶ added in v0.3.0
func (e *CPUEngine[T]) ReduceMean( ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error)
ReduceMean calculates the mean of elements along a specified axis.
func (*CPUEngine[T]) ReduceSum ¶
func (e *CPUEngine[T]) ReduceSum( ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error)
ReduceSum delegates to Sum for reduction along an axis.
func (*CPUEngine[T]) Repeat ¶
func (e *CPUEngine[T]) Repeat(_ context.Context, a *tensor.TensorNumeric[T], axis int, repetitions int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Repeat repeats the input tensor along a given axis a specified number of times.
func (*CPUEngine[T]) Reshape ¶
func (e *CPUEngine[T]) Reshape(_ context.Context, a *tensor.TensorNumeric[T], shape []int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Reshape changes the shape of a tensor without changing its data.
func (*CPUEngine[T]) Rsqrt ¶ added in v0.3.0
func (e *CPUEngine[T]) Rsqrt(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Rsqrt computes the element-wise reciprocal square root of a tensor.
func (*CPUEngine[T]) ScatterAdd ¶
func (e *CPUEngine[T]) ScatterAdd(_ context.Context, dEmbeddingTable *tensor.TensorNumeric[T], indices *tensor.TensorNumeric[int], dOut *tensor.TensorNumeric[T]) error
ScatterAdd performs a row-wise scatter-add for embeddings. dEmbeddingTable must be [vocab, dim]. indices may be 1D [N] or multi-dim with flattened length N. dOut must be [N, dim]. For each i in [0..N), it applies: dEmbeddingTable[indices[i], :] += dOut[i, :].
func (*CPUEngine[T]) Softmax ¶
func (e *CPUEngine[T]) Softmax(_ context.Context, a *tensor.TensorNumeric[T], axis int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Softmax applies the softmax function to a tensor along a given axis. If axis is negative, it is interpreted relative to the last axis (e.g., -1 means last axis).
func (*CPUEngine[T]) Split ¶
func (e *CPUEngine[T]) Split(_ context.Context, a *tensor.TensorNumeric[T], numSplits int, axis int) ([]*tensor.TensorNumeric[T], error)
Split splits a tensor into numSplits along the given axis. All splits are equal-sized; shape[axis] must be divisible by numSplits.
func (*CPUEngine[T]) Sqrt ¶
func (e *CPUEngine[T]) Sqrt(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Sqrt computes the element-wise square root of a tensor.
func (*CPUEngine[T]) Sub ¶
func (e *CPUEngine[T]) Sub(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Sub performs element-wise subtraction with broadcasting.
func (*CPUEngine[T]) Sum ¶
func (e *CPUEngine[T]) Sum( _ context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error)
Sum computes the sum of tensor elements along the specified axis. If keepDims is true, the reduced dimensions are retained with size 1. An optional destination tensor can be provided to store the result.
func (*CPUEngine[T]) Tanh ¶ added in v0.3.0
func (e *CPUEngine[T]) Tanh(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
Tanh applies the hyperbolic tangent activation element-wise.
func (*CPUEngine[T]) TanhPrime ¶ added in v0.3.0
func (e *CPUEngine[T]) TanhPrime(ctx context.Context, a, upstream *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
TanhPrime computes tanh'(a) * upstream element-wise.
func (*CPUEngine[T]) Transpose ¶
func (e *CPUEngine[T]) Transpose(_ context.Context, a *tensor.TensorNumeric[T], axes []int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
func (*CPUEngine[T]) UnaryOp ¶
func (e *CPUEngine[T]) UnaryOp(_ context.Context, a *tensor.TensorNumeric[T], op func(T) T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error)
UnaryOp applies a unary element-wise operation.
type Engine ¶
type Engine[T tensor.Numeric] interface { // Ops returns the numeric.Arithmetic operations for the engine's numeric type. Ops() numeric.Arithmetic[T] // UnaryOp applies a unary function `op` to each element of tensor `a`. // It returns a new tensor with the results. // Returns an error if the input tensor is nil. UnaryOp(ctx context.Context, a *tensor.TensorNumeric[T], op func(T) T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Add performs element-wise addition of two tensors, with support for broadcasting. // It returns a new tensor with the results. // Returns an error if tensors are nil or their shapes are not compatible for broadcasting. Add(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Sub performs element-wise subtraction of two tensors, with support for broadcasting. // It returns a new tensor with the results. // Returns an error if tensors are nil or their shapes are not compatible for broadcasting. Sub(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Mul performs element-wise multiplication of two tensors, with support for broadcasting. // It returns a new tensor with the results. // Returns an error if tensors are nil or their shapes are not compatible for broadcasting. Mul(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Div performs element-wise division of two tensors, with support for broadcasting. // It returns a new tensor with the results. // Returns an error if tensors are nil or their shapes are not compatible for broadcasting. Div(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // MatMul performs matrix multiplication of two 2D tensors. // It returns a new tensor with the result. // Returns an error if the tensors are nil, not 2D, or their shapes are incompatible for matrix multiplication. MatMul(ctx context.Context, a, b *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Transpose transposes a tensor along the given axes. // It returns a new tensor with the result. // Returns an error if the tensor is nil or the axes are invalid. Transpose(ctx context.Context, a *tensor.TensorNumeric[T], axes []int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Sum calculates the sum of elements along a specified axis. // A negative axis means summing along all axes, returning a scalar tensor. // If keepDims is true, the reduced dimensions are retained with size 1. // Returns a new tensor with the reduced shape. // Returns an error if the tensor is nil or the axis is out of bounds. Sum( ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error) // Exp computes the element-wise exponential of a tensor. Exp(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Log computes the element-wise natural logarithm of a tensor. Log(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Tanh applies the hyperbolic tangent activation function element-wise. Tanh(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // TanhPrime computes the element-wise gradient of tanh at `a` multiplied by `upstream`. // This is useful for backpropagation where `upstream` is dL/dy and the result is dL/dx. TanhPrime(ctx context.Context, a, upstream *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Pow raises each element of a tensor to the power of the corresponding element in another tensor. Pow(ctx context.Context, base, exponent *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Zero sets all elements of a tensor to zero. Zero(ctx context.Context, a *tensor.TensorNumeric[T]) error // Zeros fills the tensor with zeros. If a shape is provided, the tensor is reallocated to that shape. Zeros(ctx context.Context, a *tensor.TensorNumeric[T], shape []int) error // Copy copies the data from one tensor to another. Copy(ctx context.Context, dst, src *tensor.TensorNumeric[T]) error // Gather performs an embedding-style gather. // params must be 2D [vocab, dim]. // indices may be 1D [N] or 2D [batch, seq]. // output must be [indices..., dim], i.e., [N, dim] or [batch, seq, dim]. Gather(ctx context.Context, params *tensor.TensorNumeric[T], indices *tensor.TensorNumeric[int], output *tensor.TensorNumeric[T]) error // ScatterAdd performs a row-wise scatter-add for embeddings. // dEmbeddingTable must be [vocab, dim]. // indices may be 1D [N] or multi-dim with flattened length N. // dOut must be [N, dim]. // For each i in [0..N), it applies: dEmbeddingTable[indices[i], :] += dOut[i, :]. ScatterAdd(ctx context.Context, dEmbeddingTable *tensor.TensorNumeric[T], indices *tensor.TensorNumeric[int], dOut *tensor.TensorNumeric[T]) error // RandomUniform fills the tensor with random values from a uniform distribution. RandomUniform(ctx context.Context, t *tensor.TensorNumeric[T], minVal, maxVal T) error // Fill fills the tensor with a scalar value. Fill(ctx context.Context, t *tensor.TensorNumeric[T], value T) error // MulScalar performs element-wise multiplication of a tensor by a scalar. MulScalar(ctx context.Context, a *tensor.TensorNumeric[T], scalar T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // DivScalar performs element-wise division of a tensor by a scalar. DivScalar(ctx context.Context, a *tensor.TensorNumeric[T], scalar T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Softmax applies the softmax function to a tensor along a given axis. Softmax(ctx context.Context, a *tensor.TensorNumeric[T], axis int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // ReduceSum calculates the sum of elements along a specified axis, similar to Sum but potentially with different // internal handling or optimizations for reduction operations. ReduceSum( ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error) // AddScalar performs element-wise addition of a tensor by a scalar. AddScalar(ctx context.Context, a *tensor.TensorNumeric[T], scalar T, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Sqrt computes the element-wise square root of a tensor. Sqrt(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Split splits a tensor into multiple tensors along a given axis. Split(ctx context.Context, a *tensor.TensorNumeric[T], numSplits int, axis int) ([]*tensor.TensorNumeric[T], error) // Concat concatenates a list of tensors along a given axis. Concat(ctx context.Context, tensors []*tensor.TensorNumeric[T], axis int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Repeat repeats the input tensor along a given axis a specified number of times. Repeat( ctx context.Context, a *tensor.TensorNumeric[T], axis int, repetitions int, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error) // OneHot creates a one-hot encoding of the input tensor. OneHot(ctx context.Context, input *tensor.TensorNumeric[int], depth int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // Reshape changes the shape of a tensor without changing its data. Reshape(ctx context.Context, a *tensor.TensorNumeric[T], shape []int, dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) // ReduceMean calculates the mean of elements along a specified axis. ReduceMean( ctx context.Context, a *tensor.TensorNumeric[T], axis int, keepDims bool, dst ...*tensor.TensorNumeric[T], ) (*tensor.TensorNumeric[T], error) // Rsqrt computes the element-wise reciprocal square root of a tensor. Rsqrt(ctx context.Context, a *tensor.TensorNumeric[T], dst ...*tensor.TensorNumeric[T]) (*tensor.TensorNumeric[T], error) }
Engine defines the interface for a computation engine (e.g., CPU, GPU). All tensor operations should be routed through an Engine implementation to ensure hardware interoperability and optimized performance.
type FailableTensor ¶
type FailableTensor[T tensor.Numeric] struct { *tensor.TensorNumeric[T] // contains filtered or unexported fields }
FailableTensor wraps a tensor and can be configured to fail on specific operations.
func NewFailableTensor ¶
func NewFailableTensor[T tensor.Numeric](t *tensor.TensorNumeric[T]) *FailableTensor[T]
NewFailableTensor creates a new FailableTensor wrapper.
func (*FailableTensor[T]) Set ¶
func (f *FailableTensor[T]) Set(value T, indices ...int) error
Set overrides the tensor's Set method to allow controlled failures.
func (*FailableTensor[T]) SetFailOnSet ¶
func (f *FailableTensor[T]) SetFailOnSet(fail bool)
SetFailOnSet configures the tensor to fail on Set operations.
func (*FailableTensor[T]) SetFailOnSetAfter ¶
func (f *FailableTensor[T]) SetFailOnSetAfter(count int)
SetFailOnSetAfter configures the tensor to fail after N Set calls.
type FailableZeroer ¶
FailableZeroer can be configured to fail on Zero operations.
func NewFailableZeroer ¶
func NewFailableZeroer[T tensor.Numeric](engine *TestableEngine[T]) *FailableZeroer[T]
NewFailableZeroer creates a new FailableZeroer.
func (*FailableZeroer[T]) SetFailOnZero ¶
func (f *FailableZeroer[T]) SetFailOnZero(fail bool)
SetFailOnZero configures the zeroer to fail on Zero operations.
func (*FailableZeroer[T]) Zero ¶
func (f *FailableZeroer[T]) Zero(ctx context.Context, a *tensor.TensorNumeric[T]) error
Zero performs the zero operation with controlled failure capability.
type TestableEngine ¶
TestableEngine extends CPUEngine with methods that allow controlled error injection This enables testing of previously unreachable error paths.
func NewTestableEngine ¶
func NewTestableEngine[T tensor.Numeric](ops numeric.Arithmetic[T]) *TestableEngine[T]
NewTestableEngine creates a new TestableEngine.
func (*TestableEngine[T]) TestableMatMul ¶
func (e *TestableEngine[T]) TestableMatMul(_ context.Context, a, b *tensor.TensorNumeric[T], result *FailableTensor[T]) error
TestableMatMul performs matrix multiplication with a FailableTensor result This allows testing the error path in MatMul when result.Set() fails.
func (*TestableEngine[T]) TestableSum ¶
func (e *TestableEngine[T]) TestableSum(ctx context.Context, a *tensor.TensorNumeric[T], axis int, _ bool, zeroer *FailableZeroer[T], result *tensor.TensorNumeric[T]) error
TestableSum performs sum with a FailableZeroer This allows testing the error path in Sum when Zero() fails.
func (*TestableEngine[T]) TestableTranspose ¶
func (e *TestableEngine[T]) TestableTranspose(_ context.Context, a *tensor.TensorNumeric[T], result *FailableTensor[T]) error
TestableTranspose performs transpose with a FailableTensor result This allows testing the error path in Transpose when result.Set() fails.