Consider redacting printing of Axis types#172
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
```
|
|
||
|
|
||
| # Show ComponentArrays | ||
| _print_type_short(io, ca; color=:normal) = _print_type_short(io, typeof(ca); color=color) |
There was a problem hiding this comment.
Assuming that the approach of this PR looks good, I guess we can remove all _print_type_shorts 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.
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.
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.
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 StackOverflows 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
showas 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.showfor Axis types.Example:
now gives
instead of
Relevant discourse threads: [1], [2]