-
Notifications
You must be signed in to change notification settings - Fork 360
Add a trait to tie together compile-time and runtime number of dimensions #1575
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: refactor
Are you sure you want to change the base?
Conversation
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 word 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
(Emphasis mine) If this definition is right (and I think it is), then I don't think |
|
Yes, rank does have that meaning! I have been considering swapping our use of |
|
Yes, imo, it's a good idea. |
|
Hi! I consider myself an applied mathematician (working in quantitative finance). I have a preference for using the word Some other scattered thoughts:
As for the function name to return the "rank", my preference is Anyhow, just my two-cents. Cheers, and thanks for maintaining this library. |
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
Rankedtrait.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
Rankas 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 isndim. 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
Rankedtrait is pretty simple: require an associated type (Rank) that carries compile-time dimensionality, and a functionfn rank(&self) -> usizethat tells the user runtime dimensionality. Thesrc/layout/ranked.rsfile contains the definition, implementations, and blanket implementations. There are likely some/many types in the library or outside of it that I forgot to implementRankedfor, but I'm sure we'll find them as time goes on.I've also removed the
Rankassociated type onDimensionand madeRankeda supertrait ofDimension. 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.