8000 Fix for Julia v1.9 by adding check_belongs_to_model by odow · Pull Request #316 · infiniteopt/InfiniteOpt.jl · GitHub
[go: up one dir, main page]

Skip to content

Fix for Julia v1.9 by adding check_belongs_to_model - #316

Merged
pulsipher merged 4 commits into
infiniteopt:masterfrom
odow:patch-1
May 25, 2023
Merged

pulsipher merged 4 commits into
infiniteopt:masterfrom
odow:patch-1

Conversation

@odow
@odow odow commented May 11, 2023
Copy link
Copy Markdown
Contributor

Closes #315

I've very confused as to why this is needed...

@pulsipher
Copy link
Copy Markdown
Member

We'll see what happens with the tests. Super weird that this is needed and even weirder if it works. Maybe some bug in the Julia compiler?

@codecov
codecov Bot commented May 11, 2023 •
Copy link
Copy Markdown

Codecov Report

Merging #316 (b7da6e3) into master (b1c835d) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master     #316   +/-   ##
=======================================
  Coverage   99.77%   99.77%           
=======================================
  Files          36       36           
  Lines        7099     7103    +4     
=======================================
+ Hits         7083     7087    +4     
  Misses         16       16           
Impacted Files Coverage Δ
src/infinite_variables.jl 99.54% <100.00%> (+<0.01%) ⬆️

@odow
odow commented May 11, 2023
Copy link
Copy Markdown
Contributor Author

Maybe some bug in the Julia compiler?

Yeah. It feels like an issue with precompilation. Here's my current minimal reproducer:

(base) oscar@Oscars-MBP /tmp % julia +1.9 --project=ifo
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.9.0 (2023-05-07)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

(ifo) pkg> st
Status `/private/tmp/ifo/Project.toml`
  [20393b10] InfiniteOpt v0.5.7

julia> versioninfo()
Julia Version 1.9.0
Commit 8e630552924 (2023-05-07 11:25 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin22.4.0)
  CPU: 8 × Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, skylake)
  Threads: 1 on 8 virtual cores

julia> using InfiniteOpt

julia> function my_add_variable(model, v)
           y = InfiniteOpt.dispatch_variable_ref(v.infinite_variable_ref)
           JuMP.check_belongs_to_model(y, model)
           return
       end
my_add_variable (generic function with 1 method)

julia> m1 = InfiniteOpt.InfiniteModel();

julia> InfiniteOpt.@infinite_parameter(m1, p in [0, 1]);

julia> InfiniteOpt.@variable(m1, x, Infinite(p));

julia> v = JuMP.build_variable(
           error, 
           JuMP.VariableInfo(false, 0.0, false, 0.0, false, 0.0, false, 0.0, false, false), 
           InfiniteOpt.Point(x, 0.5),
       );

julia> m2 = InfiniteOpt.InfiniteModel();

julia> my_add_variable(m2, v)  # When called via a function, does not error

julia> y = dispatch_variable_ref(v.infinite_variable_ref)
x(p)

julia> JuMP.check_belongs_to_model(y, m2)  # When called via REPL, does error
ERROR: VariableNotOwned{InfiniteVariableRef}(x(p))
Stacktrace:
 [1] check_belongs_to_model(v::InfiniteVariableRef, model::InfiniteModel)
   @ JuMP ~/.julia/packages/JuMP/AKvOr/src/variables.jl:282
 [2] top-level scope
   @ REPL[12]:1

Am I doing anything stupid? If not, I'll open an issue upstream.

@pulsipher
Copy link
Copy Markdown
Member

Am I doing anything stupid? If not, I'll open an issue upstream.

I think I can simplify this, give me a few minutes to check. Installing Julia 1.9....

@pulsipher
pulsipher commented May 11, 2023 •
Copy link
Copy Markdown
Member

@odow I didn't succeed in getting a simpler case which confuses me even more. So yes, your MWE should be good to go to raise an issue.

@pulsipher
Copy link
Copy Markdown
Member

With the latest change, strangely using DispatchVariableRef which is a super type of InfiniteVariableRef instead of InfiniteVariableRef, causes the bug to reappear again...

@pulsipher
Copy link
Copy Markdown
Member

Requires #314 for tests to pass.

@pulsipher
Copy link
Copy Markdown
Member

With the latest change, strangely using DispatchVariableRef which is a super type of InfiniteVariableRef instead of InfiniteVariableRef, causes the bug to reappear again...

Changing it back to InfiniteVariableRef resolves the issue, still strange that this is needed and dispatching doesn't seem to be working properly.

@pulsipher
pulsipher merged commit ba79f48 into infiniteopt:master May 25, 2023
@odow
odow deleted the patch-1 branch May 25, 2023 19:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Test failure on Julia 1.9

2 participants

0