From 8be99c2e97bb8d03829eafaa80e1ac35388846a7 Mon Sep 17 00:00:00 2001 From: Eric Hanson <5846501+ericphanson@users.noreply.github.com> Date: Sun, 19 Nov 2023 21:36:25 +0100 Subject: [PATCH] Less piracy of `hcat` and `vcat` (#515) * remove most-bad methods * up --- Project.toml | 2 +- docs/src/release_notes.md | 4 ++++ src/atoms/affine/stack.jl | 12 ++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Project.toml b/Project.toml index 622896a46..6d8622e44 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Convex" uuid = "f65535da-76fb-5f13-bab9-19810c17039a" -version = "0.15.3" +version = "0.15.4" [deps] AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" diff --git a/docs/src/release_notes.md b/docs/src/release_notes.md index 576b90dab..8be767aed 100644 --- a/docs/src/release_notes.md +++ b/docs/src/release_notes.md @@ -1,5 +1,9 @@ # Release notes +## v0.15.4 (October 24, 2023) + +* Convex's piracy of `hcat` and `vcat` was made less severe, allowing precompilation of Convex.jl on Julia 1.10. + ## v0.15.3 (February 11, 2023) * Add support for LDLFactorizations v0.10 [#496](https://github.com/jump-dev/Convex.jl/pull/496). diff --git a/src/atoms/affine/stack.jl b/src/atoms/affine/stack.jl index be69f365b..89ba7d503 100644 --- a/src/atoms/affine/stack.jl +++ b/src/atoms/affine/stack.jl @@ -112,21 +112,25 @@ end # * `Value` is not owned by Convex.jl # * splatting creates zero-argument functions, which again are not owned by Convex.jl +Base.hcat(args::AbstractExpr...) = HcatAtom(args...) -hcat(args::AbstractExpr...) = HcatAtom(args...) -function hcat(args::AbstractExprOrValue...) +function Base.hcat(args::AbstractExprOrValue...) + if all(Base.Fix2(isa, Value), args) + return Base.cat(args..., dims = Val(2)) + end return HcatAtom(map(arg -> convert(AbstractExpr, arg), args)...) end -hcat(args::Value...) = Base.cat(args..., dims = Val(2)) # TODO: implement vertical concatenation in a more efficient way vcat(args::AbstractExpr...) = transpose(HcatAtom(map(transpose, args)...)) function vcat(args::AbstractExprOrValue...) + if all(Base.Fix2(isa, Value), args) + return Base.cat(args..., dims = Val(1)) + end return transpose( HcatAtom(map(arg -> transpose(convert(AbstractExpr, arg)), args)...), ) end -vcat(args::Value...) = Base.cat(args..., dims = Val(1)) # Note: this makes general vcat slower for anyone using Convex... function hvcat(rows::Tuple{Vararg{Int}}, args::AbstractExprOrValue...) nbr = length(rows)