- Notifications
You must be signed in to change notification settings - Fork338
Encode expected/actual info in ShapeError#962
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:master
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Add a (limited) way to add specific information to a ShapeErrorAdmittedly wonky, but space efficient.Result<(), ShapeError> used to be 1 byte, and with this change itexpands to 16 bytes (2 usize on 64-bit).The remaining 15 bytes are used for optimistically packing as much ofextra info into the error message as possible.For example we can store expected/actual index for errors (for exampleindex out of bounds or axis out of bounds, these are not so commonlyhandled with ShapeError).With this change it is supported:- Expected/actual index with 7 bytes per index- Expected/actual shape with 7 bytes per shape supports storing shapes with one or two bytes (< 256²) per dimension, with limited ndim.
Where possible, add expected/actual information to the ShapeError.In many places it is identified new places where more specificErrorKinds and error messages are needed. These are not updated here - acomment is inserted - this will be updated in a future version, when wecan accept breaking changes.
I guess I needed to experiment with this no-alloc approach. This is a good starting point for also experimenting with an error in a Box, which also does fine on microbenchmarks. Maybe it can be optional. |
After exploring this, I'm ready to try adding something like |
Uh oh!
There was an error while loading.Please reload this page.
Add a (limited) way to add specific information to a ShapeError
Admittedly wonky, but maybe worthwhile.
Result<(), ShapeError> used to be 1 byte, and with this change it
expands to 16 bytes (2 usize on 64-bit).
The remaining 15 bytes are used for optimistically packing as much of
extra info into the error message as possible.
For example we can store expected/actual index for errors (for example
index out of bounds or axis out of bounds, these are not so commonly
handled with ShapeError).
With this change it is supported:
supports storing shapes with one or two bytes (< 256²) per dimension,
with limited ndim.