From 1a2848f8469b4cb365f20255b0eb6439ad4215ea Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 30 Apr 2025 15:03:19 +1200 Subject: [PATCH 1/2] Prep for v1.26.0 --- Project.toml | 2 +- docs/Project.toml | 32 ++++++------- docs/make.jl | 30 ++++++++++++ docs/packages.toml | 46 +++++++++---------- docs/src/changelog.md | 43 +++++++++++++++++ docs/src/manual/solutions.md | 6 +-- .../config/vocabularies/JuMP/accept.txt | 1 + docs/update_versions.jl | 1 + src/file_formats.jl | 2 +- 9 files changed, 118 insertions(+), 45 deletions(-) diff --git a/Project.toml b/Project.toml index deeb523d876..c1167aa433d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "JuMP" uuid = "4076af6c-e467-56ae-b986-b466b2749572" repo = "https://github.com/jump-dev/JuMP.jl.git" -version = "1.25.0" +version = "1.26.0" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/docs/Project.toml b/docs/Project.toml index b44bac45fd9..24f84c8c2cb 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -48,41 +48,41 @@ Wavelets = "29a6e085-ba6d-5f35-a997-948ac2efa89a" tectonic_jll = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5" [compat] -CDDLib = "=0.10.0" +CDDLib = "=0.10.1" CSV = "0.10.15" Clarabel = "=0.10.0" Clustering = "0.15.8" DSP = "0.8.3" DataFrames = "1.7.0" -DifferentiationInterface = "0.6.50" -DimensionalData = "=0.29.15" -Distributions = "0.25.118" -Documenter = "=1.10.1" +DifferentiationInterface = "0.7.0" +DimensionalData = "=0.29.16" +Distributions = "0.25.120" +Documenter = "=1.11.4" DocumenterCitations = "1.3.7" -Dualization = "0.5.9" -Enzyme = "0.13.35" +Dualization = "0.6.0" +Enzyme = "0.13.44" ForwardDiff = "1.0.1" -Gurobi = "=1.7.3" -HTTP = "1.10.15" -HiGHS = "=1.15.0" +Gurobi = "=1.7.4" +HTTP = "1.10.16" +HiGHS = "=1.17.0" Images = "0.26.1" Interpolations = "0.15.1" -Ipopt = "=1.8.0" +Ipopt = "=1.10.3" JSON = "0.21.4" JSONSchema = "1.4.1" LinearOperatorCollection = "2.1.0" Literate = "2.20.1" MarkdownAST = "0.1.2" MathOptChordalDecomposition = "=0.2.0" -MathOptInterface = "=1.39.0" -MultiObjectiveAlgorithms = "=1.4.0" +MathOptInterface = "=1.40.0" +MultiObjectiveAlgorithms = "=1.4.2" PATHSolver = "=1.7.8" -ParametricOptInterface = "0.11.0" -Plots = "1.40.11" +ParametricOptInterface = "0.11.1" +Plots = "1.40.13" RegularizedLeastSquares = "0.16.8" SCS = "=2.1.0" SQLite = "1.6.1" -SpecialFunctions = "2.5.0" +SpecialFunctions = "2.5.1" StatsPlots = "0.15.7" Tables = "1.12.0" Wavelets = "0.10.1" diff --git a/docs/make.jl b/docs/make.jl index a1202e213b8..dc804b01538 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -556,6 +556,12 @@ function _add_moi_pages() end end end + # Fix `# Infeasibility certificates` in moi/background/infeasibility_certificates.md + filename = joinpath(moi_dir, "background", "infeasibility_certificates.md") + contents = read(filename, String) + id = "# [Infeasibility certificates](@id moi_infeasibility_certificates)" + contents = replace(contents, r"^# Infeasibility certificates$"m => id) + write(filename, contents) return end @@ -614,6 +620,30 @@ Documenter.DocMeta.setdocmeta!( recursive = true, ) +Documenter.DocMeta.setdocmeta!( + MathOptInterface, + :DocTestSetup, + :(import MathOptInterface as MOI); + recursive = true, +) + +# Remove once MOI v1.41.0 is released +MOI.Bridges.runtests( + MOI.Bridges.Constraint.GreaterToLessBridge, + """ + variables: x + x >= 1 + """, + """ + variables: x + ::Int: -1 * x <= -1 + """; + eltype = Int, + print_inner_model = true, + variable_start = 2, + constraint_start = 2, +) + # Needed to make Documenter think that there is a PDF in the right place when # link checking. Inn production we replace this by running the LaTeX build. write(joinpath(@__DIR__, "src", "JuMP.pdf"), "") diff --git a/docs/packages.toml b/docs/packages.toml index e51a9814e96..68b245cf5e5 100644 --- a/docs/packages.toml +++ b/docs/packages.toml @@ -50,30 +50,30 @@ rev = "v0.5.0" extension = true [DSDP] - rev = "v0.2.0" + rev = "v0.2.1" [Dualization] - rev = "v0.5.9" + rev = "v0.6.0" [ECOS] rev = "v1.1.3" [GLPK] rev = "v1.2.1" [Gurobi] - rev = "v1.7.3" + rev = "v1.7.4" [HiGHS] - rev = "v1.15.0" + rev = "v1.17.0" [Hypatia] - rev = "v0.8.1" + rev = "v0.8.2" has_html = true [Ipopt] - rev = "v1.8.0" + rev = "v1.10.3" [KNITRO] - rev = "v0.14.5" + rev = "v0.14.8" [MiniZinc] rev = "v0.3.12" [MosekTools] rev = "v0.15.9" [MultiObjectiveAlgorithms] - rev = "v1.4.0" + rev = "v1.4.2" has_html = true [NEOSServer] rev = "v1.2.0" @@ -82,7 +82,7 @@ [Pajarito] rev = "4c7efa915bdc900b51d1c8290dc771403b11230a" [ParametricOptInterface] - rev = "v0.11.0" + rev = "v0.11.1" extension = true [Pavito] rev = "v0.3.9" @@ -100,13 +100,13 @@ [SDPA] rev = "v0.6.0" [SDPLR] - rev = "85f63bf0389ae07f39fe48bf3fa95c78955b0695" + rev = "v0.2.0" [SDPNAL] rev = "00a3fa19f4e1235587948113b0b681da17f4dab5" [SDPT3] rev = "b565aac2a58818090d521f2340e71f597688e4fb" [SeDuMi] - rev = "v0.4.3" + rev = "v0.4.4" [SumOfSquares] rev = "v0.7.3" extension = true @@ -117,7 +117,7 @@ [Alpine] user = "lanl-ansi" - rev = "v0.5.6" + rev = "v0.5.7" [BilevelJuMP] user = "joaquimg" rev = "v0.6.2" @@ -130,21 +130,21 @@ rev = "6d165e8e8f59b14e36e99c8efb19f0e775bbd292" [CDDLib] user = "JuliaPolyhedra" - rev = "v0.10.0" + rev = "v0.10.1" [Clarabel] user = "oxfordcontrol" rev = "v0.10.0" has_html = true [COPT] user = "COPT-Public" - rev = "v1.1.23" + rev = "v1.1.24" [COSMO] user = "oxfordcontrol" rev = "v0.8.9" has_html = true [DAQP] user = "darnstrom" - rev = "v0.6.0" + rev = "v0.7.1" [DisjunctiveProgramming] user = "hdavid16" rev = "6a4d0ac4a7484e52b1dbff9cee310a73d2d23e81" @@ -152,7 +152,7 @@ extension = true [EAGO] user = "PSORLab" - rev = "v0.8.2" + rev = "v0.8.3" filename = "docs/src/jump/README.md" [GAMS] user = "GAMS-dev" @@ -164,24 +164,24 @@ extension = true [Juniper] user = "lanl-ansi" - rev = "v0.9.2" + rev = "v0.9.3" [Loraine] user = "kocvara" rev = "v0.2.5" [MadNLP] user = "MadNLP" - rev = "v0.8.6" + rev = "v0.8.7" has_html = true [MAiNGO] user = "MAiNGO-github" rev = "v0.2.2" [Manopt] user = "JuliaManifolds" - rev = "v0.5.10" + rev = "v0.5.16" filename = "Readme.md" [MathOptAI] user = "lanl-ansi" - rev = "v0.1.9" + rev = "v0.1.10" extension = true [MathOptChordalDecomposition] user = "samuelsonric" @@ -213,12 +213,12 @@ has_html = true [SCIP] user = "scipopt" - rev = "v0.12.3" + rev = "v0.12.5" [SDDP] user = "odow" - rev = "v1.10.5" + rev = "v1.11.0" has_html = true extension = true [Tulip] user = "ds4dm" - rev = "438a77b7e08b9233365603c1089cf4002e3f507c" + rev = "v0.9.7" diff --git a/docs/src/changelog.md b/docs/src/changelog.md index 4a8e5701efc..ec8d34bef07 100644 --- a/docs/src/changelog.md +++ b/docs/src/changelog.md @@ -7,6 +7,49 @@ CurrentModule = JuMP The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Version 1.26.0 (May 21, 2025) + +### Added + + - Added [`set_name(::GenericModel, ::AbstractString)`](@ref) (#3967) + - Added support for `; with_cache_type` in [`Model`](@ref) and + [`set_optimizer`](@ref) (#3979) + - Add an opt-in profiler for model macros. See [`set_macro_timing`](@ref) + and [`print_macro_timing_summary`](@ref) (#3981) + - Added `value(::Function, ::X)` and `value(::X; result::Int)` for `Symmetric` + and `Hermitian` matrices (#4000) (#4007) + +### Fixed + + - Fixed [`add_to_expression!`](@ref) with `GenericAffExpr{ComplexF64}` (#3983) + - Catch and re-throw a more informative error for `BoundAlreadySet` in `optimize!` + (#3974) + - Fixed [`reshape_vector`](@ref) when `Nothing` is passed, for example, from + an unset primal or dual start (#3988) + - Fixed a bug setting variables names when they are not supported by the solver + (#3995) + - Fixed show of `SparseAxisArray` for small display size (#3996) + - Fixed `LinearAlgebra.issymmetric(::AbstractJuMPScalar)` (#3997) + - Fixed missing [`value_type`](@ref) methods for expressions (#4002) + +### Other + + - Simplified implementation of [`shadow_price`](@ref) and improved docstring + (#3968) + - Improved formatting by adding blank lines between functions (#3969) + - Replaced `diagm` by `Diagonal` (#3971) + - Updated to cache v2 (#3972) + - Switched to using `secrets.GUROBI_LICENSE` (#3975) + - Updated versions in Project.toml and packages.toml (#3976) + - Removed admonitions from callback manual page (#3977) + - Fixed docstring of [`set_normalized_coefficient`](@ref) (#3985) + - Added [Conventions for interfacing between JuMP and MathOptInterface](@ref) + (#3987) + - Fixed errors in `cutting_stock_column_generation.jl` (#4001) + - Added an example of using SparseArrays to variable manual (#4003) + - Added [MathOptChordalDecomposition.jl](@ref) to the documentation (#4004) + - Changed to use `GITHUB_TOKEN` when downloading from GitHub (#4008) + ## Version 1.25.0 (March 27, 2025) ### Added diff --git a/docs/src/manual/solutions.md b/docs/src/manual/solutions.md index 3326c40dee4..c659ac8a32e 100644 --- a/docs/src/manual/solutions.md +++ b/docs/src/manual/solutions.md @@ -220,7 +220,7 @@ If the [`termination_status`](@ref) is [`DUAL_INFEASIBLE`](@ref) and solution exists, the certificate is an unbounded ray of the primal problem. The [`objective_value`](@ref) is the value of the objective, evaluated using the ray, excluding any constant term. For more details, see -[Infeasibility certificates](@ref). +[Infeasibility certificates](@ref moi_infeasibility_certificates). ```jldoctest julia> using HiGHS @@ -323,9 +323,7 @@ If the [`termination_status`](@ref) is [`INFEASIBLE`](@ref) and solution exists, the certificate is an unbounded ray of the dual problem. The [`dual_objective_value`](@ref) is the value of the dual objective, evaluated using the ray, excluding any constant term. For more details, see -[Infeasibility certificates](@ref). - -Fore more details, see [Infeasibility certificates](@ref). +[Infeasibility certificates](@ref moi_infeasibility_certificates). ```jldoctest julia> using HiGHS diff --git a/docs/styles/config/vocabularies/JuMP/accept.txt b/docs/styles/config/vocabularies/JuMP/accept.txt index 37d17eb0c58..8b21c621fe3 100644 --- a/docs/styles/config/vocabularies/JuMP/accept.txt +++ b/docs/styles/config/vocabularies/JuMP/accept.txt @@ -42,6 +42,7 @@ performant plagiaristic [Pp]recompil(ation|(e(?d))) preprint +profiler [Pp]seudorandom README recurse diff --git a/docs/update_versions.jl b/docs/update_versions.jl index 35e2b46efa5..6b98672bfca 100644 --- a/docs/update_versions.jl +++ b/docs/update_versions.jl @@ -3,6 +3,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. +import Pkg import TOML """ diff --git a/src/file_formats.jl b/src/file_formats.jl index d356c2b4a8a..5e1493bd84f 100644 --- a/src/file_formats.jl +++ b/src/file_formats.jl @@ -115,7 +115,7 @@ NAME ROWS N Obj COLUMNS - c0 Obj 2 + x Obj 2 RHS RHS_V Obj -1 ENDATA From 635ff76905bb5383b599d8bfaba8def16033c999 Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 21 May 2025 09:02:08 +1200 Subject: [PATCH 2/2] Update --- docs/Project.toml | 2 +- docs/make.jl | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/docs/Project.toml b/docs/Project.toml index 24f84c8c2cb..620acb5fd1a 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -74,7 +74,7 @@ LinearOperatorCollection = "2.1.0" Literate = "2.20.1" MarkdownAST = "0.1.2" MathOptChordalDecomposition = "=0.2.0" -MathOptInterface = "=1.40.0" +MathOptInterface = "=1.40.1" MultiObjectiveAlgorithms = "=1.4.2" PATHSolver = "=1.7.8" ParametricOptInterface = "0.11.1" diff --git a/docs/make.jl b/docs/make.jl index dc804b01538..b79b25480a2 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -627,23 +627,6 @@ Documenter.DocMeta.setdocmeta!( recursive = true, ) -# Remove once MOI v1.41.0 is released -MOI.Bridges.runtests( - MOI.Bridges.Constraint.GreaterToLessBridge, - """ - variables: x - x >= 1 - """, - """ - variables: x - ::Int: -1 * x <= -1 - """; - eltype = Int, - print_inner_model = true, - variable_start = 2, - constraint_start = 2, -) - # Needed to make Documenter think that there is a PDF in the right place when # link checking. Inn production we replace this by running the LaTeX build. write(joinpath(@__DIR__, "src", "JuMP.pdf"), "")