Skip to content
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

Error: TypeError: in typeassert, expected Convex.SparseTape{BigFloat}, got a value of type Vector{BigFloat} #703

Closed
Jo-star-star opened this issue Sep 9, 2024 · 3 comments · Fixed by #704

Comments

@Jo-star-star
Copy link

I stumbled open an issue I haven't been able to understand. I have two SDP problems set up similarly but with different matrix sizes, the second of which includes the first as a submatrix. The smaller one runs just fine but the second throws the following error:

TypeError: in typeassert, expected Convex.SparseTape{BigFloat}, got a value of type Vector{BigFloat}

Stacktrace:
   [1] real_operate(::typeof(vcat), ::Type{BigFloat}, ::Vector{BigFloat}, ::Vector{BigFloat}, ::Vector{BigFloat}, ::Vector{BigFloat}, ::Vararg{Union{Convex.SparseTape{BigFloat}, Vector{BigFloat}}})
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/real_operate.jl:223
   [2] operate(::typeof(vcat), ::Type{BigFloat}, ::NoSign, ::Vector{BigFloat}, ::Vararg{Any})
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/operate.jl:118
   [3] new_conic_form!(context::Convex.Context{BigFloat, MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}}, x::Convex.HcatAtom)
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/atoms/HcatAtom.jl:38
   [4] #8
     @ ~/.julia/packages/Convex/5ZBPt/src/variable_template.jl:99 [inlined]
   [5] get!
     @ ./iddict.jl:181 [inlined]
   [6] conic_form!(context::Convex.Context{BigFloat, MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}}, a::Convex.HcatAtom)
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/variable_template.jl:99
   [7] new_conic_form!(context::Convex.Context{BigFloat, MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}}, A::Convex.ReshapeAtom)
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/atoms/ReshapeAtom.jl:39
   [8] #8
     @ ~/.julia/packages/Convex/5ZBPt/src/variable_template.jl:99 [inlined]
   [9] get!
     @ ./iddict.jl:181 [inlined]
  [10] conic_form!(context::Convex.Context{BigFloat, MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}}, a::Convex.ReshapeAtom)
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/variable_template.jl:99
  [11] new_conic_form!(context::Convex.Context{BigFloat, MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}}, x::Convex.MultiplyAtom)
     @ Convex ~/.julia/packages/Convex/5ZBPt/src/atoms/MultiplyAtom.jl:93 
...
(This is repeated around 10 times)

A minimal working example is:

using SDPAFamily, Convex

include("file.txt")

problem = minimize(target, [ reA + (imA *1im) ⪰ 0]; numeric_type = BigFloat)

solve!(problem, () -> SDPAFamily.Optimizer(variant=:sdpa_gmp))

If file.txt contains

x=Variable(2)
imA=[(BigFloat(0)) (BigFloat(0)) (BigFloat(0));(BigFloat(0)) (BigFloat(0)) (BigFloat(0.5));(BigFloat(0)) (BigFloat(-0.5)) (BigFloat(0))]
reA=[(BigFloat(1.) + x[1]) (BigFloat(299.)) (BigFloat(0));(BigFloat(299.)) (BigFloat(99500.) + x[1]) (BigFloat(0));(BigFloat(0)) (BigFloat(0)) (BigFloat(0.004937810945) + x[1] + BigFloat(-0.8291873964)*x[2])]
target=x[1]

everything works fine. However, if it contains

x=Variable(3)
imA=[(BigFloat(0)) (BigFloat(0)) (BigFloat(0)) (BigFloat(0)) (BigFloat(-0.5)) (BigFloat(0));(BigFloat(0)) (BigFloat(0)) (BigFloat(0.5)) (BigFloat(0)) (BigFloat(0)) (BigFloat(0));(BigFloat(0)) (BigFloat(-0.5)) (BigFloat(0)) (BigFloat(-299.)) (BigFloat(0)) (BigFloat(0));(BigFloat(0)) (BigFloat(0)) (BigFloat(299.)) (BigFloat(0)) (BigFloat(49750.)) (BigFloat(0));(BigFloat(0.5)) (BigFloat(0)) (BigFloat(0)) (BigFloat(-49750.)) (BigFloat(0)) (BigFloat(0.007406716418) + BigFloat(-1.243781095)*x[2]);(BigFloat(0)) (BigFloat(0)) (BigFloat(0)) (BigFloat(0)) (BigFloat(-0.007406716418) + BigFloat(1.243781095)*x[2]) (BigFloat(0))]
reA=[(BigFloat(1.) + x[1]) (BigFloat(299.)) (BigFloat(0)) (BigFloat(99500.)) (BigFloat(0)) (BigFloat(0.004937810945) + BigFloat(-0.8291873964)*x[2]);(BigFloat(299.)) (BigFloat(99500.) + x[1]) (BigFloat(0)) (BigFloat(3.4825e7)) (BigFloat(0)) (BigFloat(0.495));(BigFloat(0)) (BigFloat(0)) (BigFloat(0.004937810945) + x[1] + BigFloat(-0.8291873964)*x[2]) (BigFloat(0)) (BigFloat(0.495)) (BigFloat(-0.08291873964)*x[3]);(BigFloat(99500.)) (BigFloat(3.4825e7)) (BigFloat(0)) (BigFloat(1.256486e10) + x[1]) (BigFloat(0)) (BigFloat(98.5));(BigFloat(0)) (BigFloat(0)) (BigFloat(0.495)) (BigFloat(0)) (BigFloat(99.5) + x[1]) (BigFloat(0.08291873964)*x[3]);(BigFloat(0.004937810945) + BigFloat(-0.8291873964)*x[2]) (BigFloat(0.495)) (BigFloat(-0.08291873964)*x[3]) (BigFloat(98.5)) (BigFloat(0.08291873964)*x[3]) (x[1] + x[2])]
target=x[1]

it throws the error above. Can you help me understand what is the difference between the two cases and what is happening?

@odow
Copy link
Member

odow commented Sep 9, 2024

This is just a bug in Convex.jl. I'll open a PR with the fix.

@odow
Copy link
Member

odow commented Sep 9, 2024

This is fixed if you update to the latest v0.16.3 version of Convex.jl

Thanks for reporting the issue!

@Jo-star-star
Copy link
Author

Thank you very much for the super quick reply!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging a pull request may close this issue.

2 participants