Skip to content

v1.11-rc2: Inconsistent behaviour between function call and expected behaviour #55396

Closed
@dlfivefifty

Description

@dlfivefifty

I have a function call where the behaviour is completely different from typing that function manually. I've tried to construct a simpler example but haven't been successful.

Here is the broken code:

julia> using InfiniteArrays, FillArrays, LinearAlgebra

julia> A = Tridiagonal(Fill(1,∞), Fill(2,∞), Fill(3,∞))
ℵ₀×ℵ₀ Tridiagonal{Int64, Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}} with indices OneToInf()×OneToInf():
 2  3                          
 1  2  3                         
   1  2  3                       
     1  2  3                     
       1  2  3                   
         1  2  3                
           1  2  3               
             1  2  3             
               1  2  3           
                 1  2  3         
                   1  2  3      
                     1  2  3     
                       1  2     
                         1     
                                       

julia> B = 2I;

julia> A + B
ℵ₀×ℵ₀ Tridiagonal{Int64, Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}} with indices OneToInf()×OneToInf():
 0  3                          
 1  0  3                         
   1  0  3                       
     1  0  3                     
       1  0  3                   
         1  0  3                
           1  0  3               
             1  0  3             
               1  0  3           
                 1  0  3         
                   1  0  3      
                     1  0  3     
                       1  0     
                         1     
                                       

The diagonal of the result should be 4. Here is the actual offending function which I have re-implemented as myplus:

julia> @which A + B
+(A::Tridiagonal, B::UniformScaling)
     @ LinearAlgebra ~/Projects/julia-1.11/usr/share/julia/stdlib/v1.11/LinearAlgebra/src/special.jl:230

julia> function myplus(A, B) # copied from special.jl:2030
           newd = A.d .+ Ref(B)
           Tridiagonal(typeof(newd)(A.dl), newd, typeof(newd)(A.du))
       end
myplus (generic function with 1 method)

julia> myplus(A, B) # same behaviour
ℵ₀×ℵ₀ Tridiagonal{Int64, Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}} with indices OneToInf()×OneToInf():
 0  3                          
 1  0  3                         
   1  0  3                       
     1  0  3                     
       1  0  3                   
         1  0  3                
           1  0  3               
             1  0  3             
               1  0  3           
                 1  0  3         
                   1  0  3      
                     1  0  3     
                       1  0     
                         1     
                                       

So its not related to the macro @commutative.

Now the odd part: if I type out the actual code it works fine:

julia> newd = A.d .+ Ref(B)
ℵ₀-element Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}} with indices OneToInf(), with entries equal to 4

julia> Tridiagonal(typeof(newd)(A.dl), newd, typeof(newd)(A.du)) 
ℵ₀×ℵ₀ Tridiagonal{Int64, Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}} with indices OneToInf()×OneToInf():
 4  3                          
 1  4  3                         
   1  4  3                       
     1  4  3                     
       1  4  3                   
         1  4  3                
           1  4  3               
             1  4  3             
               1  4  3           
                 1  4  3         
                   1  4  3      
                     1  4  3     
                       1  4     
                         1     
                                       

Running the code via Debugger also returns the correct result.

Note here is the bug in CI showing its present in all OSes: JuliaLinearAlgebra/InfiniteLinearAlgebra.jl#187

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIndicates an unexpected problem or unintended behaviorregression 1.11Regression in the 1.11 release

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions