rohitg00/ai-engineering-from-scratch · error · ValueError
Invalid permutation {dims} for rank {self.rank}
Error message
Invalid permutation {dims} for rank {self.rank} What it means
Error "Invalid permutation {dims} for rank {self.rank}" thrown in rohitg00/ai-engineering-from-scratch.
Source
Thrown at phases/01-math-foundations/12-tensor-operations/code/tensors.py:151
if not new_shape:
new_shape = ()
return self.reshape(new_shape)
def unsqueeze(self, dim):
if dim < 0:
dim = len(self._shape) + 1 + dim
new_shape = list(self._shape)
new_shape.insert(dim, 1)
return self.reshape(tuple(new_shape))
def transpose(self, dim0, dim1):
perm = list(range(self.rank))
perm[dim0], perm[dim1] = perm[dim1], perm[dim0]
return self.permute(perm)
def permute(self, dims):
if sorted(dims) != list(range(self.rank)):
raise ValueError(f"Invalid permutation {dims} for rank {self.rank}")
new_shape = tuple(self._shape[d] for d in dims)
result = Tensor.__new__(Tensor)
result._shape = new_shape
result._strides = self._compute_strides(new_shape)
result._data = [0] * self.size
old_strides = self._strides
for old_indices in iterproduct(*(range(s) for s in self._shape)):
new_indices = tuple(old_indices[d] for d in dims)
old_flat = sum(i * s for i, s in zip(old_indices, old_strides))
new_flat = sum(
i * s for i, s in zip(new_indices, result._strides)
)
result._data[new_flat] = self._data[old_flat]
return result
View on GitHub (pinned to 39ea8a1c6d)
When it happens
Trigger: Thrown at phases/01-math-foundations/12-tensor-operations/code/tensors.py:151 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26).
Data as JSON: /api/errors/d3ccf49288e97f67.
Report an issue: GitHub.