diff --git a/docs/examples_literate/general_examples/basic_usage.jl b/docs/examples_literate/general_examples/basic_usage.jl index cd0065ee4..2577878de 100644 --- a/docs/examples_literate/general_examples/basic_usage.jl +++ b/docs/examples_literate/general_examples/basic_usage.jl @@ -81,7 +81,7 @@ x.value y = Semidefinite(2) -p = maximize(lambdamin(y), tr(y)<=6) +p = maximize(eigmin(y), tr(y)<=6) solve!(p, SCS.Optimizer(verbose=0)) p.optval diff --git a/docs/examples_literate/mixed_integer/aux_files/antidiag.jl b/docs/examples_literate/mixed_integer/aux_files/antidiag.jl index c2d894e8f..bf43e44fc 100644 --- a/docs/examples_literate/mixed_integer/aux_files/antidiag.jl +++ b/docs/examples_literate/mixed_integer/aux_files/antidiag.jl @@ -8,9 +8,8 @@ # All expressions and atoms are subtpyes of AbstractExpr. # Please read expressions.jl first. ############################################################################# - import Convex.sign, Convex.monotonicity, Convex.curvature, Convex.evaluate, Convex.conic_form! -export antidiag, sign, monotonicity, curvature, evaluate, conic_form! +export antidiag ### Diagonal ### Represents the kth diagonal of an mxn matrix as a (min(m, n) - k) x 1 vector diff --git a/docs/src/operations.md b/docs/src/operations.md index d48810506..150c2fcba 100644 --- a/docs/src/operations.md +++ b/docs/src/operations.md @@ -110,8 +110,8 @@ solver (including SCS and Mosek). | ------------------ | --------------------------------- | ------- | ------------- | ------------------------------ | | `nuclearnorm(x)` | sum of singular values of $x$ | convex | not monotonic | none | | `operatornorm(x)` | max of singular values of $x$ | convex | not monotonic | none | -| `lambdamax(x)` | max eigenvalue of $x$ | convex | not monotonic | none | -| `lambdamin(x)` | min eigenvalue of $x$ | concave | not monotonic | none | +| `eigmax(x)` | max eigenvalue of $x$ | convex | not monotonic | none | +| `eigmin(x)` | min eigenvalue of $x$ | concave | not monotonic | none | | `matrixfrac(x, P)` | $x^TP^{-1}x$ | convex | not monotonic | IC: P is positive semidefinite | Exponential + SDP representable Functions diff --git a/src/Convex.jl b/src/Convex.jl index 0245d4c0f..640e380f3 100644 --- a/src/Convex.jl +++ b/src/Convex.jl @@ -4,13 +4,36 @@ module Convex using OrderedCollections: OrderedDict using LinearAlgebra using SparseArrays +using AbstractTrees: AbstractTrees using MathOptInterface const MOI = MathOptInterface const MOIU = MOI.Utilities const MOIB = MOI.Bridges -global DEFAULT_SOLVER = nothing +# Functions +export conv, dotsort, entropy, exp, geomean, hinge_loss, huber, inner_product, invpos +export log_perspective, logisticloss, logsumexp, matrixfrac, neg, norm2, norm_1, norm_inf, nuclearnorm +export partialtrace, partialtranspose, pos, qol_elementwise, quadform, quadoverlin, rationalnorm +export relative_entropy, scaledgeomean, sigmamax, square, sumlargest, sumlargesteigs, sumsmallest, sumsquares + +# rexports from LinearAlgebra +export diag, diagm, Diagonal, dot, eigmax, eigmin, kron, logdet, norm, tr + +# Constraints +export isposdef, ⪰, ⪯ # PSD constraints +export socp + +# Variables +export Constant, ComplexVariable, HermitianSemidefinite, Semidefinite, Variable +export curvature, evaluate, fix!, free!, monotonicity, sign, vexity + +# Signs +export Positive, Negative, ComplexSign, NoSign + +# Problems +export add_constraint!, add_constraints!, maximize, minimize, Problem, satisfy, solve! + ### modeling framework include("dcp.jl") include("expressions.jl") @@ -71,7 +94,7 @@ include("atoms/second_order_cone/huber.jl") ### SDP atoms include("atoms/sdp_cone/nuclearnorm.jl") include("atoms/sdp_cone/operatornorm.jl") -include("atoms/sdp_cone/lambda_min_max.jl") +include("atoms/sdp_cone/eig_min_max.jl") include("atoms/sdp_cone/matrixfrac.jl") include("atoms/sdp_cone/sumlargesteigs.jl") @@ -98,4 +121,7 @@ function clearmemory() Base.depwarn("Convex.clearmemory() is deprecated, as the memory leak it works around has been closed (in https://github.com/JuliaOpt/Convex.jl/pull/322). This function no longer does anything and will be removed in a future Convex.jl release.", :clearmemory ) end +@deprecate lambdamin eigmin +@deprecate lambdamax eigmax + end diff --git a/src/atoms/affine/add_subtract.jl b/src/atoms/affine/add_subtract.jl index facdce95f..69f997c34 100644 --- a/src/atoms/affine/add_subtract.jl +++ b/src/atoms/affine/add_subtract.jl @@ -6,9 +6,6 @@ # Please read expressions.jl first. ############################################################################# -export +, - -export sign, curvature, monotonicity, evaluate - ### Unary Negation struct NegateAtom <: AbstractExpr diff --git a/src/atoms/affine/conjugate.jl b/src/atoms/affine/conjugate.jl index 6b9e9e092..dad713190 100644 --- a/src/atoms/affine/conjugate.jl +++ b/src/atoms/affine/conjugate.jl @@ -1,6 +1,4 @@ import Base.conj -export conj -export sign, curvature, monotonicity, evaluate, conic_form! struct ConjugateAtom <: AbstractExpr head::Symbol id_hash::UInt64 diff --git a/src/atoms/affine/conv.jl b/src/atoms/affine/conv.jl index 02ed3d835..2a2081169 100644 --- a/src/atoms/affine/conv.jl +++ b/src/atoms/affine/conv.jl @@ -3,8 +3,6 @@ # Handles convolution between a constant vector and an expression vector. ############################################################################# -export conv - function conv(x::Value, y::AbstractExpr) if (size(x,2) != 1 && length(size(x)) != 1) || size(y,2) != 1 error("convolution only supported between two vectors") diff --git a/src/atoms/affine/diag.jl b/src/atoms/affine/diag.jl index 5653c53ce..fd093235e 100644 --- a/src/atoms/affine/diag.jl +++ b/src/atoms/affine/diag.jl @@ -7,8 +7,6 @@ # k >= min(num_cols, num_rows) || k <= -min(num_rows, num_cols) import LinearAlgebra.diag -export diag -#export sign, curvature, monotonicity, evaluate ### Diagonal ### Represents the kth diagonal of an mxn matrix as a (min(m, n) - k) x 1 vector diff --git a/src/atoms/affine/diagm.jl b/src/atoms/affine/diagm.jl index 7c08e0208..1707af711 100644 --- a/src/atoms/affine/diagm.jl +++ b/src/atoms/affine/diagm.jl @@ -6,7 +6,6 @@ ############################################################################# import LinearAlgebra.diagm, LinearAlgebra.Diagonal -export diagm, Diagonal struct DiagMatrixAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/affine/dot.jl b/src/atoms/affine/dot.jl index fb235371b..1d50918c4 100644 --- a/src/atoms/affine/dot.jl +++ b/src/atoms/affine/dot.jl @@ -1,5 +1,4 @@ import LinearAlgebra.dot -export dot ismatrix(x::AbstractExpr) = (s = size(x); length(s) == 2 && s[1] > 1 && s[2] > 1) ismatrix(::AbstractMatrix) = true diff --git a/src/atoms/affine/index.jl b/src/atoms/affine/index.jl index 9beca6f48..c63797ebe 100644 --- a/src/atoms/affine/index.jl +++ b/src/atoms/affine/index.jl @@ -1,5 +1,4 @@ -import Base: getindex, to_index -export IndexAtom, getindex +import Base.getindex const ArrayOrNothing = Union{AbstractArray, Nothing} diff --git a/src/atoms/affine/inner_product.jl b/src/atoms/affine/inner_product.jl index e2534303d..ab402896b 100644 --- a/src/atoms/affine/inner_product.jl +++ b/src/atoms/affine/inner_product.jl @@ -1,5 +1,3 @@ -export inner_product - function inner_product(x::AbstractExpr, y::AbstractExpr) if x.size == y.size && x.size[1] == x.size[2] return real(tr(x'*y)) diff --git a/src/atoms/affine/kron.jl b/src/atoms/affine/kron.jl index 698625400..e969980d9 100644 --- a/src/atoms/affine/kron.jl +++ b/src/atoms/affine/kron.jl @@ -1,5 +1,4 @@ import LinearAlgebra.kron -export kron function kron(a::Value, b::AbstractExpr) rows = AbstractExpr[] diff --git a/src/atoms/affine/multiply_divide.jl b/src/atoms/affine/multiply_divide.jl index 08981e70a..b9f642d3f 100644 --- a/src/atoms/affine/multiply_divide.jl +++ b/src/atoms/affine/multiply_divide.jl @@ -7,7 +7,6 @@ ############################################################################# import Base.Broadcast.broadcasted -export sign, monotonicity, curvature, evaluate, conic_form! ### Scalar and matrix multiplication diff --git a/src/atoms/affine/partialtrace.jl b/src/atoms/affine/partialtrace.jl index e345ab479..377fadde8 100644 --- a/src/atoms/affine/partialtrace.jl +++ b/src/atoms/affine/partialtrace.jl @@ -1,4 +1,3 @@ -export partialtrace # We compute the partial trace of x by summing over # (I ⊗ ⊗ I) for all j's @@ -40,4 +39,4 @@ function partialtrace(x, sys::Int, dims::Vector) end return sum(j -> _term(x, j, sys, dims), 1:dims[sys]) -end \ No newline at end of file +end diff --git a/src/atoms/affine/partialtranspose.jl b/src/atoms/affine/partialtranspose.jl index 90ccfd86a..e85380f4b 100644 --- a/src/atoms/affine/partialtranspose.jl +++ b/src/atoms/affine/partialtranspose.jl @@ -1,6 +1,4 @@ import Base.sign -export partialtranspose, PartialTransposeAtom -export sign, curvature, monotonicity, evaluate, conic_form! struct PartialTransposeAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/affine/real_imag.jl b/src/atoms/affine/real_imag.jl index 7aa470371..145a97a39 100644 --- a/src/atoms/affine/real_imag.jl +++ b/src/atoms/affine/real_imag.jl @@ -5,9 +5,6 @@ ############################################################################# import Base.real, Base.imag -export real, imag -export sign, monotonicity, curvature, evaluate - ### Real struct RealAtom <: AbstractExpr diff --git a/src/atoms/affine/reshape.jl b/src/atoms/affine/reshape.jl index d9038c690..0d8dc5433 100644 --- a/src/atoms/affine/reshape.jl +++ b/src/atoms/affine/reshape.jl @@ -1,7 +1,4 @@ import Base.reshape, Base.vec -export reshape, vec -export sign, curvature, monotonicity, evaluate, conic_form! - struct ReshapeAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/affine/stack.jl b/src/atoms/affine/stack.jl index 3236c030c..fafb51e4f 100644 --- a/src/atoms/affine/stack.jl +++ b/src/atoms/affine/stack.jl @@ -1,7 +1,4 @@ import Base.vcat, Base.hcat, Base.hvcat -export vcat, hcat, hvcat, HcatAtom -export sign, curvature, monotonicity, evaluate, conic_form! - struct HcatAtom <: AbstractExpr head::Symbol id_hash::UInt64 diff --git a/src/atoms/affine/sum.jl b/src/atoms/affine/sum.jl index 9ba8b0415..e3f508fbb 100644 --- a/src/atoms/affine/sum.jl +++ b/src/atoms/affine/sum.jl @@ -4,9 +4,7 @@ # All expressions and atoms are subtpyes of AbstractExpr. # Please read expressions.jl first. ############################################################################# - import Base.sum -export sum ### Sum Atom struct SumAtom <: AbstractExpr diff --git a/src/atoms/affine/trace.jl b/src/atoms/affine/trace.jl index 738bfc25f..797c370e7 100644 --- a/src/atoms/affine/trace.jl +++ b/src/atoms/affine/trace.jl @@ -1,5 +1,4 @@ import LinearAlgebra.tr -export tr function tr(e::AbstractExpr) return sum(diag(e)) diff --git a/src/atoms/affine/transpose.jl b/src/atoms/affine/transpose.jl index a43902415..2ef671413 100644 --- a/src/atoms/affine/transpose.jl +++ b/src/atoms/affine/transpose.jl @@ -6,8 +6,6 @@ ############################################################################# import Base.transpose, Base.adjoint -export transpose, adjoint, TransposeAtom, AdjointAtom -export sign, curvature, monotonicity, evaluate, conic_form! struct TransposeAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/exp_+_sdp_cone/logdet.jl b/src/atoms/exp_+_sdp_cone/logdet.jl index 46898458a..bd8a2bf4e 100644 --- a/src/atoms/exp_+_sdp_cone/logdet.jl +++ b/src/atoms/exp_+_sdp_cone/logdet.jl @@ -1,5 +1,4 @@ import LinearAlgebra.logdet -export logdet struct LogDetAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/exp_cone/entropy.jl b/src/atoms/exp_cone/entropy.jl index 34195c14a..08468f00e 100644 --- a/src/atoms/exp_cone/entropy.jl +++ b/src/atoms/exp_cone/entropy.jl @@ -5,9 +5,6 @@ # Please read expressions.jl first. ############################################################################# -export entropy -export sign, curvature, monotonicity, evaluate - ### Entropy: sum_i -x_i log (x_i) # TODO: make this work for a *list* of inputs, rather than just for scalar/vector/matrix inputs diff --git a/src/atoms/exp_cone/exp.jl b/src/atoms/exp_cone/exp.jl index a46681a57..799401e82 100644 --- a/src/atoms/exp_cone/exp.jl +++ b/src/atoms/exp_cone/exp.jl @@ -4,10 +4,7 @@ # All expressions and atoms are subtpyes of AbstractExpr. # Please read expressions.jl first. ############################################################################# - import Base.exp -export exp -export sign, curvature, monotonicity, evaluate ### Exponential diff --git a/src/atoms/exp_cone/log.jl b/src/atoms/exp_cone/log.jl index db34e1d00..20f1f003d 100644 --- a/src/atoms/exp_cone/log.jl +++ b/src/atoms/exp_cone/log.jl @@ -4,10 +4,7 @@ # All expressions and atoms are subtpyes of AbstractExpr. # Please read expressions.jl first. ############################################################################# - import Base.log -export log -export sign, curvature, monotonicity, evaluate ### Logarithm diff --git a/src/atoms/exp_cone/logsumexp.jl b/src/atoms/exp_cone/logsumexp.jl index 18261b90a..50224634b 100644 --- a/src/atoms/exp_cone/logsumexp.jl +++ b/src/atoms/exp_cone/logsumexp.jl @@ -5,9 +5,6 @@ # Please read expressions.jl first. ############################################################################# -export logsumexp, logisticloss -export sign, curvature, monotonicity, evaluate - ### LogSumExp # TODO: make this work for a *list* of inputs, rather than just for vector/matrix inputs diff --git a/src/atoms/exp_cone/relative_entropy.jl b/src/atoms/exp_cone/relative_entropy.jl index 7d8e98bc4..b681c3239 100644 --- a/src/atoms/exp_cone/relative_entropy.jl +++ b/src/atoms/exp_cone/relative_entropy.jl @@ -5,9 +5,6 @@ # Please read expressions.jl first. ############################################################################# -export relative_entropy, log_perspective -export sign, curvature, monotonicity, evaluate - # TODO: make this work for a *list* of inputs, rather than just for scalar/vector/matrix inputs struct RelativeEntropyAtom <: AbstractExpr diff --git a/src/atoms/lp_cone/abs.jl b/src/atoms/lp_cone/abs.jl index 77de37d19..4d3a42dfe 100644 --- a/src/atoms/lp_cone/abs.jl +++ b/src/atoms/lp_cone/abs.jl @@ -4,10 +4,7 @@ # All expressions and atoms are subtpyes of AbstractExpr. # Please read expressions.jl first. ############################################################################# - import Base.abs, Base.abs2 -export abs, abs2 -export sign, curvature, monotonicity, evaluate ### Absolute Value diff --git a/src/atoms/lp_cone/dotsort.jl b/src/atoms/lp_cone/dotsort.jl index 90e4ea3cd..abf7fc806 100644 --- a/src/atoms/lp_cone/dotsort.jl +++ b/src/atoms/lp_cone/dotsort.jl @@ -5,9 +5,6 @@ # Please read expressions.jl first. ############################################################################# -export dotsort -export sign, curvature, monotonicity, evaluate - # This atom computes dot(sort(x), sort(w)), where w is constant # for example, if w = [1 1 1 0 0 0 ... 0], it computes the sum of the 3 largest elements of x struct DotSortAtom <: AbstractExpr diff --git a/src/atoms/lp_cone/max.jl b/src/atoms/lp_cone/max.jl index 229a73e33..9a1452c9f 100644 --- a/src/atoms/lp_cone/max.jl +++ b/src/atoms/lp_cone/max.jl @@ -5,7 +5,6 @@ # Please read expressions.jl first. ############################################################################# import Base.max -export max, pos, hinge_loss # TODO: This can easily be extended to work ### Max Atom diff --git a/src/atoms/lp_cone/maximum.jl b/src/atoms/lp_cone/maximum.jl index c08e60a66..ee290fdb1 100644 --- a/src/atoms/lp_cone/maximum.jl +++ b/src/atoms/lp_cone/maximum.jl @@ -5,7 +5,6 @@ # Please read expressions.jl first. ############################################################################# import Base.maximum -export maximum ### Maximum Atom struct MaximumAtom <: AbstractExpr diff --git a/src/atoms/lp_cone/min.jl b/src/atoms/lp_cone/min.jl index 9946514f8..0fa0cfed7 100644 --- a/src/atoms/lp_cone/min.jl +++ b/src/atoms/lp_cone/min.jl @@ -5,7 +5,6 @@ # Please read expressions.jl first. ############################################################################# import Base.min -export min, neg # TODO: This can easily be extended to work ### Min Atom diff --git a/src/atoms/lp_cone/minimum.jl b/src/atoms/lp_cone/minimum.jl index 14d75134b..2c4903223 100644 --- a/src/atoms/lp_cone/minimum.jl +++ b/src/atoms/lp_cone/minimum.jl @@ -5,7 +5,6 @@ # Please read expressions.jl first. ############################################################################# import Base.minimum -export minimum ### Minimum Atom struct MinimumAtom <: AbstractExpr diff --git a/src/atoms/lp_cone/sumlargest.jl b/src/atoms/lp_cone/sumlargest.jl index 952feeda3..982da6c58 100644 --- a/src/atoms/lp_cone/sumlargest.jl +++ b/src/atoms/lp_cone/sumlargest.jl @@ -5,9 +5,6 @@ # Please read expressions.jl first. ############################################################################# -export sumlargest, sumsmallest -export sign, curvature, monotonicity, evaluate - struct SumLargestAtom <: AbstractExpr head::Symbol id_hash::UInt64 diff --git a/src/atoms/sdp_cone/lambda_min_max.jl b/src/atoms/sdp_cone/eig_min_max.jl similarity index 63% rename from src/atoms/sdp_cone/lambda_min_max.jl rename to src/atoms/sdp_cone/eig_min_max.jl index 1f46f6d22..6eedc4a51 100644 --- a/src/atoms/sdp_cone/lambda_min_max.jl +++ b/src/atoms/sdp_cone/eig_min_max.jl @@ -1,55 +1,56 @@ ############################################################################# -# lambdamin_max.jl +# eigmin_max.jl # Handles maximum and minimum eigenvalue of a symmetric positive definite matrix # (and imposes the constraint that its argument be PSD) # All expressions and atoms are subtypes of AbstractExpr. # Please read expressions.jl first. ############################################################################# -export lambdamax, lambdamin -### Lambda max +import LinearAlgebra: eigmin, eigmax -struct LambdaMaxAtom <: AbstractExpr +### Eig max + +struct EigMaxAtom <: AbstractExpr head::Symbol id_hash::UInt64 children::Tuple{AbstractExpr} size::Tuple{Int, Int} - function LambdaMaxAtom(x::AbstractExpr) + function EigMaxAtom(x::AbstractExpr) children = (x,) m, n = size(x) if m == n - return new(:lambdamax, hash(children), children, (1, 1)) + return new(:eigmax, hash(children), children, (1, 1)) else - error("lambdamax can only be applied to a square matrix.") + error("eigmax can only be applied to a square matrix.") end end end -function sign(x::LambdaMaxAtom) +function sign(x::EigMaxAtom) return Positive() end -function monotonicity(x::LambdaMaxAtom) +function monotonicity(x::EigMaxAtom) return (Nondecreasing(),) end -function curvature(x::LambdaMaxAtom) +function curvature(x::EigMaxAtom) return ConvexVexity() end -function evaluate(x::LambdaMaxAtom) - eigvals(evaluate(x.children[1]))[end] +function evaluate(x::EigMaxAtom) + eigmax(evaluate(x.children[1])) end -lambdamax(x::AbstractExpr) = LambdaMaxAtom(x) +eigmax(x::AbstractExpr) = EigMaxAtom(x) # Create the equivalent conic problem: # minimize t # subject to # tI - A is positive semidefinite # A is positive semidefinite -function conic_form!(x::LambdaMaxAtom, unique_conic_forms) +function conic_form!(x::EigMaxAtom, unique_conic_forms) if !has_conic_form(unique_conic_forms, x) A = x.children[1] m, n = size(A) @@ -60,49 +61,49 @@ function conic_form!(x::LambdaMaxAtom, unique_conic_forms) return get_conic_form(unique_conic_forms, x) end -### Lambda min +### Eig min -struct LambdaMinAtom <: AbstractExpr +struct EigMinAtom <: AbstractExpr head::Symbol id_hash::UInt64 children::Tuple{AbstractExpr} size::Tuple{Int, Int} - function LambdaMinAtom(x::AbstractExpr) + function EigMinAtom(x::AbstractExpr) children = (x,) m, n = size(x) if m == n - return new(:lambdamin, hash(children), children, (1,1)) + return new(:eigmin, hash(children), children, (1,1)) else - error("lambdamin can only be applied to a square matrix.") + error("eigmin can only be applied to a square matrix.") end end end -function sign(x::LambdaMinAtom) +function sign(x::EigMinAtom) return Positive() end -function monotonicity(x::LambdaMinAtom) +function monotonicity(x::EigMinAtom) return (Nondecreasing(),) end -function curvature(x::LambdaMinAtom) +function curvature(x::EigMinAtom) return ConcaveVexity() end -function evaluate(x::LambdaMinAtom) - eigvals(evaluate(x.children[1]))[1] +function evaluate(x::EigMinAtom) + eigmin(evaluate(x.children[1])) end -lambdamin(x::AbstractExpr) = LambdaMinAtom(x) +eigmin(x::AbstractExpr) = EigMinAtom(x) # Create the equivalent conic problem: # maximize t # subject to # A - tI is positive semidefinite # A is positive semidefinite -function conic_form!(x::LambdaMinAtom, unique_conic_forms) +function conic_form!(x::EigMinAtom, unique_conic_forms) if !has_conic_form(unique_conic_forms, x) A = x.children[1] m, n = size(A) diff --git a/src/atoms/sdp_cone/matrixfrac.jl b/src/atoms/sdp_cone/matrixfrac.jl index be4b4ab47..d4add1a91 100644 --- a/src/atoms/sdp_cone/matrixfrac.jl +++ b/src/atoms/sdp_cone/matrixfrac.jl @@ -5,7 +5,6 @@ # All expressions and atoms are subtypes of AbstractExpr. # Please read expressions.jl first. ############################################################################# -export matrixfrac struct MatrixFracAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/sdp_cone/nuclearnorm.jl b/src/atoms/sdp_cone/nuclearnorm.jl index 4bf60757d..551c26540 100644 --- a/src/atoms/sdp_cone/nuclearnorm.jl +++ b/src/atoms/sdp_cone/nuclearnorm.jl @@ -4,7 +4,6 @@ # All expressions and atoms are subtypes of AbstractExpr. # Please read expressions.jl first. ############################################################################# -export nuclearnorm ### Nuclear norm diff --git a/src/atoms/sdp_cone/operatornorm.jl b/src/atoms/sdp_cone/operatornorm.jl index fa83cdec7..3688cc07b 100644 --- a/src/atoms/sdp_cone/operatornorm.jl +++ b/src/atoms/sdp_cone/operatornorm.jl @@ -6,7 +6,6 @@ # Please read expressions.jl first. ############################################################################# import LinearAlgebra: opnorm -export sigmamax ### Operator norm diff --git a/src/atoms/sdp_cone/sumlargesteigs.jl b/src/atoms/sdp_cone/sumlargesteigs.jl index 9869745af..520e659fb 100644 --- a/src/atoms/sdp_cone/sumlargesteigs.jl +++ b/src/atoms/sdp_cone/sumlargesteigs.jl @@ -6,7 +6,6 @@ # Please read expressions.jl first. ############################################################################# import LinearAlgebra.eigvals -export sumlargesteigs ### sumlargesteigs diff --git a/src/atoms/second_order_cone/geomean.jl b/src/atoms/second_order_cone/geomean.jl index 516b1326e..701e36e19 100644 --- a/src/atoms/second_order_cone/geomean.jl +++ b/src/atoms/second_order_cone/geomean.jl @@ -1,6 +1,4 @@ import Base.sqrt -export GeoMeanAtom, geomean, sqrt -export sign, monotonicity, curvature, conic_form! struct GeoMeanAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/second_order_cone/huber.jl b/src/atoms/second_order_cone/huber.jl index 6c05d4b7e..59b722350 100644 --- a/src/atoms/second_order_cone/huber.jl +++ b/src/atoms/second_order_cone/huber.jl @@ -1,5 +1,3 @@ -export huber - struct HuberAtom <: AbstractExpr head::Symbol id_hash::UInt64 diff --git a/src/atoms/second_order_cone/norm.jl b/src/atoms/second_order_cone/norm.jl index 0fdc6a04b..09e8927f6 100755 --- a/src/atoms/second_order_cone/norm.jl +++ b/src/atoms/second_order_cone/norm.jl @@ -1,5 +1,4 @@ import LinearAlgebra.norm -export norm_inf, norm, norm_1 # deprecate these soon norm_inf(x::AbstractExpr) = maximum(abs(x)) diff --git a/src/atoms/second_order_cone/norm2.jl b/src/atoms/second_order_cone/norm2.jl index faf015255..17ef5b23b 100644 --- a/src/atoms/second_order_cone/norm2.jl +++ b/src/atoms/second_order_cone/norm2.jl @@ -5,8 +5,6 @@ # Please read expressions.jl first. ############################################################################# import LinearAlgebra.norm2 -export EucNormAtom, norm2 -export sign, monotonicity, curvature, conic_form! struct EucNormAtom <: AbstractExpr diff --git a/src/atoms/second_order_cone/qol_elementwise.jl b/src/atoms/second_order_cone/qol_elementwise.jl index 439a6bcb3..cd9fb9ada 100644 --- a/src/atoms/second_order_cone/qol_elementwise.jl +++ b/src/atoms/second_order_cone/qol_elementwise.jl @@ -1,6 +1,4 @@ import Base.Broadcast.broadcasted -export QolElemAtom, qol_elementwise, square, sumsquares, invpos, / -export sign, monotonicity, curvature, conic_form! struct QolElemAtom <: AbstractExpr head::Symbol diff --git a/src/atoms/second_order_cone/quadform.jl b/src/atoms/second_order_cone/quadform.jl index 0cbd559c7..31e951f59 100644 --- a/src/atoms/second_order_cone/quadform.jl +++ b/src/atoms/second_order_cone/quadform.jl @@ -1,4 +1,3 @@ -export quadform function quadform(x::Value, A::AbstractExpr) return x' * A * x diff --git a/src/atoms/second_order_cone/quadoverlin.jl b/src/atoms/second_order_cone/quadoverlin.jl index eb9796a5f..84e380671 100644 --- a/src/atoms/second_order_cone/quadoverlin.jl +++ b/src/atoms/second_order_cone/quadoverlin.jl @@ -1,6 +1,3 @@ -export QuadOverLinAtom, quadoverlin -export sign, monotonicity, curvature, conic_form! - struct QuadOverLinAtom <: AbstractExpr head::Symbol id_hash::UInt64 diff --git a/src/atoms/second_order_cone/rationalnorm.jl b/src/atoms/second_order_cone/rationalnorm.jl index 98926a98e..b5a27a2e5 100644 --- a/src/atoms/second_order_cone/rationalnorm.jl +++ b/src/atoms/second_order_cone/rationalnorm.jl @@ -11,8 +11,6 @@ # https://github.com/JuliaOpt/Convex.jl/raw/master/docs/supplementary/rational_to_socp.pdf ############################################################################# -export rationalnorm - ### k-norm for rational k struct RationalNormAtom <: AbstractExpr diff --git a/src/atoms/second_order_cone/scaledgeomean.jl b/src/atoms/second_order_cone/scaledgeomean.jl index 108aa251a..514b8e11d 100644 --- a/src/atoms/second_order_cone/scaledgeomean.jl +++ b/src/atoms/second_order_cone/scaledgeomean.jl @@ -1,6 +1,4 @@ import Base.sqrt -export ScaledGeoMeanAtom, scaledgeomean, sqrt -export sign, monotonicity, curvature, conic_form! function power_of_2_gt(n::Int) Int(2^ceil(log(2,n))) diff --git a/src/conic_form.jl b/src/conic_form.jl index 45bcc920b..60f707f37 100644 --- a/src/conic_form.jl +++ b/src/conic_form.jl @@ -1,7 +1,3 @@ -export ConicObj, ConicConstr, UniqueConicForms -export promote_size, get_row -export cache_conic_form!, has_conic_form, get_conic_form - # TODO: Comment every single line # ConicObj represents an affine function of the variables diff --git a/src/constant.jl b/src/constant.jl index 2a0d3f992..2741645c9 100644 --- a/src/constant.jl +++ b/src/constant.jl @@ -2,8 +2,6 @@ # constant.jl # Defines Constant, which is a subtype of AbstractExpr ############################################################################# -export Constant -export vexity, evaluate, sign, conic_form! ispos(x::Real) = x >= 0 ispos(v::AbstractVecOrMat{<:Real}) = all(ispos, v) diff --git a/src/constraints/constraints.jl b/src/constraints/constraints.jl index ef3f20400..fc1cf611f 100644 --- a/src/constraints/constraints.jl +++ b/src/constraints/constraints.jl @@ -1,6 +1,4 @@ import Base.==, Base.<=, Base.>=, Base.<, Base.> -export EqConstraint, LtConstraint, GtConstraint -export ==, <=, >= ### Linear equality constraint mutable struct EqConstraint <: Constraint diff --git a/src/constraints/exp_constraints.jl b/src/constraints/exp_constraints.jl index 119eea1c3..3276ef1db 100644 --- a/src/constraints/exp_constraints.jl +++ b/src/constraints/exp_constraints.jl @@ -1,5 +1,3 @@ -export ExpConstraint, conic_form!, vexity - ### (Primal) exponential cone constraint ExpConstraint(x,y,z) => y exp(x/y) <= z & y>=0 struct ExpConstraint <: Constraint head::Symbol diff --git a/src/constraints/sdp_constraints.jl b/src/constraints/sdp_constraints.jl index 3758f3990..a78a9f45e 100644 --- a/src/constraints/sdp_constraints.jl +++ b/src/constraints/sdp_constraints.jl @@ -1,7 +1,5 @@ import LinearAlgebra.isposdef import Base.in -export SDPConstraint, isposdef, in, ⪰, ⪯ - ### Positive semidefinite cone constraint # TODO: Terrible documentation. Please fix. diff --git a/src/constraints/signs_and_sets.jl b/src/constraints/signs_and_sets.jl index 557c17ebf..fdefae9a8 100644 --- a/src/constraints/signs_and_sets.jl +++ b/src/constraints/signs_and_sets.jl @@ -1,5 +1,3 @@ -export conic_form! - conic_form!(s::Positive, x::Variable, unique_conic_forms) = conic_form!(x>=0, unique_conic_forms) conic_form!(s::Negative, x::Variable, unique_conic_forms) = conic_form!(x<=0, unique_conic_forms) diff --git a/src/constraints/soc_constraints.jl b/src/constraints/soc_constraints.jl index ce98b2f00..c40db80df 100644 --- a/src/constraints/soc_constraints.jl +++ b/src/constraints/soc_constraints.jl @@ -1,6 +1,3 @@ -export SOCConstraint, SOCElemConstraint, conic_form! -export socp - # TODO: Document this. How is this different from SOCElemConstraint? Why do we need both. How does # conic form work for SOC constraints. struct SOCConstraint <: Constraint diff --git a/src/dcp.jl b/src/dcp.jl index 041d5945d..00be92c64 100644 --- a/src/dcp.jl +++ b/src/dcp.jl @@ -11,10 +11,6 @@ ############################################################################# import Base.-, Base.+, Base.*, Base./ -export Vexity, ConstVexity, AffineVexity, ConvexVexity, ConcaveVexity, NotDcp -export Monotonicity, Nonincreasing, Nondecreasing, NoMonotonicity -export Sign, Positive, Negative, NoSign, ComplexSign -export -, +, * # Vexity subtypes abstract type Vexity end diff --git a/src/expressions.jl b/src/expressions.jl index 62ccc34d9..ba8083991 100644 --- a/src/expressions.jl +++ b/src/expressions.jl @@ -29,11 +29,6 @@ ############################################################################# import Base.sign, Base.size, Base.length, Base.lastindex, Base.ndims, Base.convert, Base.axes -export AbstractExpr, Constraint -export vexity, sign, size, evaluate, monotonicity, curvature, length, convert -export conic_form! -export lastindex, ndims -export Value, ValueOrNothing ### Abstract types abstract type AbstractExpr end @@ -42,7 +37,6 @@ abstract type Constraint end # Override hash function because of # https://github.com/JuliaLang/julia/issues/10267 import Base.hash -export hash const hashaa_seed = UInt === UInt64 ? 0x7f53e68ceb575e76 : 0xeb575e7 function hash(a::Array{AbstractExpr}, h::UInt) diff --git a/src/problem_depot/problem_depot.jl b/src/problem_depot/problem_depot.jl index 2eca46e7e..5582faa67 100644 --- a/src/problem_depot/problem_depot.jl +++ b/src/problem_depot/problem_depot.jl @@ -8,6 +8,7 @@ const MOI = MathOptInterface using Convex using LinearAlgebra using LinearAlgebra: eigen, I, opnorm +using Convex: AffineVexity, ConcaveVexity, ConvexVexity randperm(d) = sortperm(rand(d)) shuffle(x) = x[randperm(length(x))] diff --git a/src/problem_depot/problems/sdp.jl b/src/problem_depot/problems/sdp.jl index ea013f166..a6666d979 100644 --- a/src/problem_depot/problems/sdp.jl +++ b/src/problem_depot/problems/sdp.jl @@ -114,7 +114,7 @@ end @add_problem sdp function sdp_dual_lambda_max_atom(handle_problem!, ::Val{test}, atol, rtol, ::Type{T}) where {T, test} y = Semidefinite(3) - p = minimize(lambdamax(y), y[1,1]>=4; numeric_type = T) + p = minimize(eigmax(y), y[1,1]>=4; numeric_type = T) if test @test vexity(p) == ConvexVexity() @@ -122,12 +122,12 @@ end handle_problem!(p) if test @test p.optval ≈ 4 atol=atol rtol=rtol - @test evaluate(lambdamax(y)) ≈ 4 atol=atol rtol=rtol + @test evaluate(eigmax(y)) ≈ 4 atol=atol rtol=rtol end # https://github.com/JuliaOpt/Convex.jl/issues/337 x = ComplexVariable(2, 2) - p = minimize( lambdamax(x), [ x[1,2] == im, x[2,2] == 1.0, x ⪰ - eye(2) ]; numeric_type = T) + p = minimize( eigmax(x), [ x[1,2] == im, x[2,2] == 1.0, x ⪰ - eye(2) ]; numeric_type = T) handle_problem!(p) if test @test p.optval ≈ 1.5 atol=atol rtol=rtol @@ -138,7 +138,7 @@ end @add_problem sdp function sdp_lambda_min_atom(handle_problem!, ::Val{test}, atol, rtol, ::Type{T}) where {T, test} y = Semidefinite(3) - p = maximize(lambdamin(y), tr(y)<=6; numeric_type = T) + p = maximize(eigmin(y), tr(y)<=6; numeric_type = T) if test @test vexity(p) == ConvexVexity() @@ -146,7 +146,7 @@ end handle_problem!(p) if test @test p.optval ≈ 2 atol=atol rtol=rtol - @test evaluate(lambdamin(y)) ≈ 2 atol=atol rtol=rtol + @test evaluate(eigmin(y)) ≈ 2 atol=atol rtol=rtol end end @@ -168,7 +168,7 @@ end @add_problem sdp function sdp_matrix_frac_atom_both_arguments_variable(handle_problem!, ::Val{test}, atol, rtol, ::Type{T}) where {T, test} x = Variable(3) P = Variable(3, 3) - p = minimize(matrixfrac(x, P), lambdamax(P) <= 2, x[1] >= 1; numeric_type = T) + p = minimize(matrixfrac(x, P), eigmax(P) <= 2, x[1] >= 1; numeric_type = T) if test @test vexity(p) == ConvexVexity() @@ -201,7 +201,7 @@ end end x1 = Semidefinite(3) - p1 = minimize(lambdamax(x1), x1[1,1]>=4; numeric_type = T) + p1 = minimize(eigmax(x1), x1[1,1]>=4; numeric_type = T) handle_problem!(p1) @@ -215,7 +215,7 @@ end end x1 = Semidefinite(3) - p1 = minimize(lambdamax(x1), [x1[i,:] >= i for i=1:3]...; numeric_type = T) + p1 = minimize(eigmax(x1), [x1[i,:] >= i for i=1:3]...; numeric_type = T) handle_problem!(p1) diff --git a/src/problems.jl b/src/problems.jl index 7fe074342..edfc6ddb8 100644 --- a/src/problems.jl +++ b/src/problems.jl @@ -1,5 +1,3 @@ -export Problem, minimize, maximize, satisfy, add_constraint!, add_constraints! - mutable struct Problem{T<:Real} head::Symbol objective::AbstractExpr diff --git a/src/solution.jl b/src/solution.jl index 5e746674b..80f2be31f 100644 --- a/src/solution.jl +++ b/src/solution.jl @@ -1,5 +1,3 @@ -export solve! - # Convert from sets used within Convex to MOI sets function get_MOI_set(cone, length_inds) if cone == :SDP diff --git a/src/utilities/broadcast.jl b/src/utilities/broadcast.jl index c5508b0ef..cc1557dcf 100644 --- a/src/utilities/broadcast.jl +++ b/src/utilities/broadcast.jl @@ -2,7 +2,6 @@ # because overloading broadcast no longer works in Julia v0.6 import LinearAlgebra.dot -export dot # multiplication dot(::typeof(*)) = applyDotMultiplyAtom diff --git a/src/utilities/iteration.jl b/src/utilities/iteration.jl index c07c99440..32381c443 100644 --- a/src/utilities/iteration.jl +++ b/src/utilities/iteration.jl @@ -1,5 +1,4 @@ import Base.iterate -export iterate function iterate(x::Variable, s=0) return s >= length(x) ? nothing : (x[s+1], s+1) diff --git a/src/utilities/show.jl b/src/utilities/show.jl index fcaa69258..e7a657355 100644 --- a/src/utilities/show.jl +++ b/src/utilities/show.jl @@ -1,6 +1,4 @@ import Base.show, Base.summary -export show, summary -using AbstractTrees: AbstractTrees using .TreePrint """ diff --git a/src/utilities/tree_interface.jl b/src/utilities/tree_interface.jl index 4573da529..3be3f3684 100644 --- a/src/utilities/tree_interface.jl +++ b/src/utilities/tree_interface.jl @@ -1,5 +1,3 @@ -using AbstractTrees: AbstractTrees - AbstractTrees.children(p::Problem) = (p.objective, p.constraints) AbstractTrees.children(e::AbstractExpr) = e.children diff --git a/src/variable.jl b/src/variable.jl index 181c9836b..c3877705e 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -3,9 +3,6 @@ # Defines Variable, which is a subtype of AbstractExpr ############################################################################# -export Variable, Semidefinite, ComplexVariable, HermitianSemidefinite -export vexity, evaluate, sign, conic_form!, fix!, free! - mutable struct Variable <: AbstractExpr head::Symbol id_hash::UInt64 diff --git a/test/deprecations.jl b/test/deprecations.jl new file mode 100644 index 000000000..6f9e55d70 --- /dev/null +++ b/test/deprecations.jl @@ -0,0 +1,7 @@ +@testset "Deprecations" begin + A = Semidefinite(2) + @test_deprecated lambdamin(A) + @test_deprecated lambdamax(A) + + @test_deprecated Convex.clearmemory() +end diff --git a/test/runtests.jl b/test/runtests.jl index 02bf24585..0fcf00845 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -28,6 +28,7 @@ end @testset "Convex" begin include("test_utilities.jl") + include("deprecations.jl") @testset "SCS with warmstarts" begin # We exclude `sdp_matrix_frac_atom` due to the bug https://github.com/JuliaOpt/SCS.jl/issues/153 diff --git a/test/test_utilities.jl b/test/test_utilities.jl index e62f86597..1127ce0a8 100644 --- a/test/test_utilities.jl +++ b/test/test_utilities.jl @@ -1,3 +1,5 @@ +using Convex: AbstractExpr, ConicObj + @testset "Utilities" begin @testset "`solve!` does not return anything" begin @@ -123,10 +125,6 @@ dual status: FEASIBLE_POINT""" end - @testset "clearmemory" begin - @test_deprecated Convex.clearmemory() - end - @testset "ConicObj with type $T" for T = [UInt32, UInt64] c = ConicObj() z = zero(T)