Hi,

I have encountered a weird behaviour in JuMP. This works

JuMP.@constraint(model, sum(A[i, :] * Y_mat[i,:]’ for i in 1:m) .- sum(μ)*I .==

zeros(n,n))

while this does not

```
JuMP.@constraint(model, sum(A[i, :] * transpose(Y_mat[i,:]) for i in 1:m) .- sum(μ)*I .== zeros(n,n))
```

It throws this error

MethodError: no method matching promote_array_mul(::Type{Vector{Float64}}, ::Type{Transpose{VariableRef, Vector{VariableRef}}})

To my understanding, both should be internally the same. Is this a bug or is there a specific reason JuMP does not support transpose() here?

I am on Julia 1.9.0 and JuMP v1.19.0.

odow
2
Hi @dhendryc, welcome to the forum!

I’ve opened an issue with this bug report: Missing methods for LinearAlgebra.Transpose · Issue #256 · jump-dev/MutableArithmetics.jl · GitHub

The issue stems from the fact that `x'`

is not actually `LinearAlgebra.transpose`

, but `LinearAlgebra.adjoint`

. (The difference is very subtle.)

```
julia> x[1, :]
2-element Vector{VariableRef}:
x[1,1]
x[1,2]
julia> x[1, :]'
1×2 adjoint(::Vector{VariableRef}) with eltype VariableRef:
x[1,1] x[1,2]
julia> transpose(x[1, :])
1×2 transpose(::Vector{VariableRef}) with eltype VariableRef:
x[1,1] x[1,2]
julia> adjoint(x[1, :])
1×2 adjoint(::Vector{VariableRef}) with eltype VariableRef:
x[1,1] x[1,2]
```

But this is a bad MethodError, and we can fix to support `transpose`

as well.

Hi @odow ,

thank you for the clarification!

It would be nice if JuMP also supported `transpose`

. I find it easier to catch modelling errors, `'`

can be easily overlooked.

odow
4
I’ve fixed this in MutableArithmetics.jl, so it just needs a new release. Likely in the next day or two