Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/MilesONerd/neurenix/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Tensor class is the fundamental data structure in Neurenix, similar to tensors in PyTorch or TensorFlow. It provides a multi-dimensional array with automatic device management and gradient tracking.

Class Definition

class Tensor:
    def __init__(
        self,
        data: Union[np.ndarray, List, Tuple, Tensor, None] = None,
        shape: Optional[Sequence[int]] = None,
        dtype: Optional[Union[DType, str]] = None,
        device: Optional[Device] = None,
        requires_grad: bool = False,
    )

Parameters

data
Union[np.ndarray, List, Tuple, Tensor, None]
The data to initialize the tensor with. Can be a NumPy array, a list, a tuple, another Tensor, or None (for uninitialized tensor).
shape
Optional[Sequence[int]]
The shape of the tensor. If None, inferred from data.
dtype
Optional[Union[DType, str]]
The data type of the tensor. If None, inferred from data. Options: ‘float32’, ‘float64’, ‘int32’, ‘int64’, ‘bool’.
device
Optional[Device]
The device to store the tensor on. If None, uses the default device.
requires_grad
bool
default:"False"
Whether to track gradients for this tensor.

Properties

shape

@property
def shape(self) -> Tuple[int, ...]
Get the shape of the tensor.
return
Tuple[int, ...]
The shape of the tensor as a tuple of integers.

dtype

@property
def dtype(self) -> DType
Get the data type of the tensor.

device

@property
def device(self) -> Device
Get the device where the tensor is stored.

requires_grad

@property
def requires_grad(self) -> bool
Check if the tensor requires gradients.

grad

@property
def grad(self) -> Optional[Tensor]
Get the gradient of the tensor.

Methods

numpy

def numpy(self) -> np.ndarray
Convert the tensor to a NumPy array. This operation will copy the tensor data from the device to the CPU if necessary.
return
np.ndarray
A NumPy array with the tensor data.

to

def to(self, device: Device, non_blocking: bool = False) -> Tensor
Move the tensor to the specified device.
device
Device
The target device.
non_blocking
bool
default:"False"
If True, the copy will be performed asynchronously. Only has an effect for CUDA/ROCm devices.
return
Tensor
A new tensor on the target device.

hot_swap_device

def hot_swap_device(self, device: Device) -> None
Hot-swap the tensor to a different device without creating a new tensor. This method changes the device of the tensor in-place.

reshape

def reshape(self, *shape) -> Tensor
Reshape the tensor to the given shape.
shape
*args
The new shape of the tensor.
return
Tensor
A new tensor with the given shape.

transpose

def transpose(self, dim0: int = 0, dim1: int = 1) -> Tensor
Transpose the tensor along the given dimensions.

matmul

def matmul(self, other: Tensor) -> Tensor
Matrix multiplication with another tensor.

mean

def mean(self, dim: Optional[int] = None, keepdim: bool = False) -> Tensor
Compute the mean along the specified dimension.

sum

def sum(self, dim: Optional[int] = None, keepdim: bool = False) -> Tensor
Compute the sum along the specified dimension.

clone

def clone(self) -> Tensor
Create a clone of this tensor.

backward

def backward(self)
Compute gradients through the computation graph.

Activation Functions

relu

def relu(self, inplace: bool = False) -> Tensor
Apply the rectified linear unit function element-wise.

sigmoid

def sigmoid(self) -> Tensor
Apply the sigmoid function element-wise.

tanh

def tanh(self) -> Tensor
Apply the hyperbolic tangent function element-wise.

softmax

def softmax(self, dim: int = -1) -> Tensor
Apply the softmax function along the specified dimension.

log_softmax

def log_softmax(self, dim: int = -1) -> Tensor
Apply the log softmax function along the specified dimension.

leaky_relu

def leaky_relu(self, negative_slope: float = 0.01, inplace: bool = False) -> Tensor
Apply the leaky rectified linear unit function element-wise.

gelu

def gelu(self, approximate: bool = False) -> Tensor
Apply the Gaussian error linear unit function element-wise.

Static Methods

zeros

@staticmethod
def zeros(
    shape: Sequence[int],
    dtype: Optional[DType] = None,
    device: Optional[Device] = None,
    requires_grad: bool = False
) -> Tensor
Create a tensor filled with zeros.

ones

@staticmethod
def ones(
    shape: Sequence[int],
    dtype: Optional[DType] = None,
    device: Optional[Device] = None,
    requires_grad: bool = False
) -> Tensor
Create a tensor filled with ones.

randn

@staticmethod
def randn(
    shape: Sequence[int],
    dtype: Optional[DType] = None,
    device: Optional[Device] = None,
    requires_grad: bool = False
) -> Tensor
Create a tensor filled with random numbers from a normal distribution.

stack

@staticmethod
def stack(tensors: List[Tensor], dim: int = 0) -> Tensor
Stack tensors along a new dimension.

cat

@staticmethod
def cat(tensors: List[Tensor], dim: int = 0) -> Tensor
Concatenate tensors along an existing dimension.

no_grad

@staticmethod
@contextmanager
def no_grad()
Context manager to disable gradient computation.

Example Usage

import neurenix as nx

# Create a tensor from a list
x = nx.Tensor([[1, 2, 3], [4, 5, 6]])
print(x.shape)  # (2, 3)

# Create a tensor with zeros
zeros = nx.Tensor.zeros((3, 4), dtype=nx.DType.FLOAT32)

# Create a random tensor
rand = nx.Tensor.randn((2, 3, 4))

# Reshape a tensor
reshaped = x.reshape(3, 2)

# Apply activation functions
activated = x.relu()
softmax_output = x.softmax(dim=1)

# Matrix multiplication
y = nx.Tensor.randn((3, 5))
result = x.matmul(y)

# Move to device
device = nx.Device(nx.DeviceType.CUDA, 0)
x_cuda = x.to(device)

# Gradient tracking
x = nx.Tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x * 2
z = y.sum()
z.backward()
print(x.grad)  # Gradients

# Context manager for inference
with nx.Tensor.no_grad():
    prediction = model(input_tensor)

Build docs developers (and LLMs) love