-
-
Notifications
You must be signed in to change notification settings - Fork 35
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
Consider redacting printing of Axis types #172
base: main
Are you sure you want to change the base?
Conversation
This PR reduces the very long stacktraces that can sometimes occur with ComponentArrays, by having by default a reducted form of `Base.show` for Axis types. Example: ``` ERROR: MethodError: no method matching h(::ComponentMatrix{Float64, Matrix{Float64}, Tuple{Axis{...}, FlatAxis}}) Closest candidates are: h() at REPL[14]:1 Stacktrace: [1] top-level scope @ REPL[15]:1 ``` now gives ``` ERROR: MethodError: no method matching h(::ComponentMatrix{Float64, Matrix{Float64}, Tuple{Axis{...}, FlatAxis}}) Closest candidates are: h() at REPL[2]:1 Stacktrace: [1] top-level scope @ REPL[3]:1 ``` instead of ``` ERROR: MethodError: no method matching h(::ComponentMatrix{Float64, Matrix{Float64}, Tuple{Axis{(first = 1, second = 2, third = 3, fourth = 4)}, FlatAxis}}) Closest candidates are: h() at REPL[2]:1 Stacktrace: [1] top-level scope @ REPL[3]:1 ```
Base.show(io::IO, ci::ComponentIndex) = print(io, "ComponentIndex($(ci.idx), $(ci.ax))") | ||
|
||
|
||
|
||
|
||
# Show ComponentArrays | ||
_print_type_short(io, ca; color=:normal) = _print_type_short(io, typeof(ca); color=color) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Assuming that the approach of this PR looks good, I guess we can remove all _print_type_short
s and the Base.print_type_stacktrace
that I understand is not working on recent version of julia?
Codecov Report
@@ Coverage Diff @@
## master #172 +/- ##
==========================================
- Coverage 73.49% 72.59% -0.90%
==========================================
Files 20 20
Lines 679 686 +7
==========================================
- Hits 499 498 -1
- Misses 180 188 +8
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
return print(io, "PartitionedAxis{$PartSz, {...}, $Ax}") | ||
end | ||
Base.show(io::IO, ::Type{ShapedAxis{Shape,IdxMap}}) where {Shape,IdxMap} = print(io, "ShapedAxis($Shape, {...})") | ||
Base.show(io::IO, ::Type{ViewAxis{Inds,IdxMap,Ax}}) where {Inds,IdxMap,Ax} = print(io, "ViewAxis{$Inds, {...}, $Ax)") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is how ComponentArrays used to do type printing, but we had to get rid of it because it tends to break a lot of things
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Base.print_type_stacktrace
was supposed to be the solution to this, but if it’s not working anymore, I’m not sure what to do. We don’t want to potentially cause a segfault for someone.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, I should have thought that I am reinventing the wheel here 😄
I took a look at the current Julia
's show
code that is used for stacktraces but I found it too complicated, and it made me think that overriding something "private" there might be dangerous (for example, I generated too many StackOverflow
s while playing around with overriding things there 😵💫)
How about:
- We open a new discourse thread to discuss this again with the community, since no good solution seems to exist as of now
- Keep overriding the
show
as per this PR, but only when a preference is set. Update the Readme accordingly.
This PR reduces the very long stacktraces that can sometimes occur with ComponentArrays, by having by introducing a redacted form of
Base.show
for Axis types.Example:
now gives
instead of
Relevant discourse threads: [1], [2]