jump-dev / JuMP.jl

Modeling language for Mathematical Optimization (linear, mixed-integer, conic, semidefinite, nonlinear)
http://jump.dev/JuMP.jl/
Other
2.22k stars 393 forks source link

Fix modifying user-expressions in macros #3639

Closed odow closed 9 months ago

odow commented 9 months ago

Closes #3638

Looks like this was caused by the new MA.rewrite( ; move_factors_into_sums = false) code path in https://github.com/jump-dev/JuMP.jl/pull/3106

julia> JuMP._MA.rewrite(:(e))
(Symbol("##308"), :(var"##308" = begin
          #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:325 =#
          let
              #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:326 =#
              begin
                  var"##310" = MutableArithmetics.Zero()
                  var"##309" = (MutableArithmetics.operate!!)(MutableArithmetics.add_mul, var"##310", $(Expr(:escape, :e)))
              end
              #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:327 =#
              var"##309"
          end
      end))

julia> JuMP._MA.rewrite(:(e); move_factors_into_sums = false)
(Symbol("##311"), :(var"##311" = begin
          #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:325 =#
          let
              #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:326 =#
              begin
                  #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:321 =#
              end
              #= /Users/oscar/.julia/packages/MutableArithmetics/NIXlP/src/rewrite.jl:327 =#
              $(Expr(:escape, :e))
          end
      end))

Note how the latter does not create a copy of the expression.

codecov[bot] commented 9 months ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (f5f07b5) 98.27% compared to head (a493931) 98.27%.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #3639 +/- ## ======================================= Coverage 98.27% 98.27% ======================================= Files 43 43 Lines 5636 5639 +3 ======================================= + Hits 5539 5542 +3 Misses 97 97 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.