-
Notifications
You must be signed in to change notification settings - Fork 38
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
reshape
error on Julia master
#373
Comments
FTR, it's usually better to move an existing issue to the proper repo, than to create a new one. That's what I was asking for. Someone who's a member of JuliaArrays should be able to do that. Not that it matters much now. |
Sorry, didn't know that! |
I think |
I agree. While looking into fixing this, I stumbled upon many open tickets for It's a bit overwhelming TBH. |
Is this bug also in Julia v1.11-rc? I think it’s a mistake to try to support master as it’s always too much of a moving target |
The bug is that FillArrays relies on internal Julia functionality, It only manifests on nightly, though. |
This PR generalizes the `reshape` methods to accept `Integer`s instead of `Int`s, and adds a `_reshape_uncolon` method for `Integer` arguments. The current `_reshape_uncolon` method that accepts `Int`s is left unchanged to ensure that the inferred types are not impacted. I've also tried to ensure that most `Integer` subtypes in `Base` that may be safely converted to `Int`s pass through that method. The call sequence would now go like this: ```julia reshape(A, ::Tuple{Vararg{Union{Integer, Colon}}}) -> reshape(A, ::Tuple{Vararg{Integer}}) -> reshape(A, ::Tuple{Vararg{Int}}) (fallback) ``` This lets packages define `reshape(A::CustomArray, ::Tuple{Integer, Vararg{Integer}})` without having to implement `_reshape_uncolon` by themselves (or having to call internal `Base` functions, as in JuliaArrays/FillArrays.jl#373). `reshape` calls involving a `Colon` would convert this to an `Integer` in `Base`, and then pass the `Integer` sizes to the custom method defined in the package. This PR does not resolve issues like #40076 because this still converts `Integer`s to `Int`s in the actual reshaping step. However, `BigInt` sizes that may be converted to `Int`s will work now: ```julia julia> reshape(1:4, big(2), big(2)) 2×2 reshape(::UnitRange{Int64}, 2, 2) with eltype Int64: 1 3 2 4 julia> reshape(1:4, big(1), :) 1×4 reshape(::UnitRange{Int64}, 1, 4) with eltype Int64: 1 2 3 4 ``` Note that the reshape method with `Integer` sizes explicitly converts these to `Int`s to avoid self-recursion (as opposed to calling `to_shape` to carry out the conversion implicitly). In the future, we may want to decide what to do with types or values that can't be converted to an `Int`. --------- Co-authored-by: Neven Sajko <s@purelymail.com>
This issue is now resolved on nightly, but there's a separate error that should be solved by a |
I discovered the following issue with the OffsetArrays tests, see JuliaArrays/OffsetArrays.jl#353. @nsajko suggested that I report it here and mention JuliaLang/julia#54261. The error happens both with FillArrays v1.11.0 and master:
The text was updated successfully, but these errors were encountered: