Skip to content

Conversation

@akern40
Copy link
Collaborator

@akern40 akern40 commented Jan 11, 2026

This is the next PR to address #1506. In the previous PR (#1568) we established a trait for capturing the "dimensionality" or "rank" of an array at the type level. This PR is focused on providing a bridge from type-level dimensionality to runtime dimensionality, which we do through the new Ranked trait.

First, a note on language: we now have three words / phrases to refer to the same thing: number of dimensions, dimensionality, and rank. That's ok, they're all accurate, but I'm worried it will be confusing as time goes on. Similarly, in #1568, we decided on using Rank as the name of the associated type that tells you the compile-time number of dimensions. However, the function that has traditionally provided the number of dimensions is ndim. So we have a slight vocabulary problem. I would really love some input and feedback about what language we should be using; especially from people for whom English is not their first / primary language.

The Ranked trait is pretty simple: require an associated type (Rank) that carries compile-time dimensionality, and a function fn rank(&self) -> usize that tells the user runtime dimensionality. The src/layout/ranked.rs file contains the definition, implementations, and blanket implementations. There are likely some/many types in the library or outside of it that I forgot to implement Ranked for, but I'm sure we'll find them as time goes on.

I've also removed the Rank associated type on Dimension and made Ranked a supertrait of Dimension. I think this is the best way to do this, but it does mean that I've had to remove the "unstable" feature flag we had introduced. Since this code isn't merging to main yet, I think that's fine.

@akern40 akern40 requested a review from nilgoyette January 11, 2026 00:51
@nilgoyette
Copy link
Collaborator

I would really love some input and feedback about what language we should be using; especially from people for whom English is not their first / primary language.

Moi! I'm one of those :) As a long-time programmer, I like dimension and dimensionality. This being said, I do know what rank means and it's certainly a good work if we're going to work with matrices. The problem that I see it that the complete definition of rank (at least according to google AI) is

The rank of a matrix is the maximum number of linearly independent rows or columns it has, representing the dimension of the vector space spanned by its rows (row space) or columns (column space).

(Emphasis mine) If this definition is right (and I think it is), then I don't think rank is a good name. A mathematician using ndarray might think that rank() returns/calculates the actual mathematical rank. IIUC, a 3x3 matrix of zeros has a rank equal to 1, no?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants