Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a cleaned up, faster and better version of
$OutputSizeLimit
.It now lives in its own class based on
_MakeBoxesStrategy
and makes the state more clean by using a dedicated class_LimitedMakeBoxesState
. The whole code is now inexpression.py
to avoid the ugly in procedure imports needed forExpression
until now.There are two functional differences from the current code:
(1) The very first and the very last elements in a tree are now always output; e.g.
Nest[Partition[#, 2]&, Range[2 ^7], 7]
now yields{{{{{{{{1, <<1>>}, <<1>>}, <<1>>}, <<1>>}, <<1>>}, <<1>>}, {<<1>>, {<<1>>, {<<1>>, {<<1>>, {<<1>>, {<<1>>, 128}}}}}}}}
(it yields a lame{<<1>>}
with the current implementation).(2) Every output that has been calculated using
MakeBoxes
is now always output and never thrown away.(2) is a relaxation from the strict limit given by
$OutputSizeLimit
. The effect of this is a big speedup, since it no longer retries different parts of the expression to fit the remaining capacity, but simply outputs one and then stops. Try settingx=Nest[Partition[#, 2]&, Range[2 ^10], 10]
and then outputtingx
several times; the current code is very sluggish (> 2s on my machine), this new code is fast (<.5 s).