@@ -3,26 +3,34 @@ using LinearAlgebra
33struct ZeroPolynomialInAlgebraicSetBridge{
44 T,
55 F<: MOI.AbstractVectorFunction ,
6- BT <: MB.AbstractPolynomialBasis ,
6+ Z <: SA.AbstractBasis ,
77 DT<: SS.AbstractAlgebraicSet ,
88 MT<: MP.AbstractMonomial ,
99 MVT<: AbstractVector{MT} ,
1010} <: MOI.Bridges.Constraint.AbstractBridge
1111 zero_constraint:: MOI.ConstraintIndex {
1212 F,
13- PolyJuMP. ZeroPolynomialSet{SS. FullSpace,BT,MT,MVT},
13+ PolyJuMP. ZeroPolynomialSet{
14+ SS. FullSpace,
15+ Z,
16+ MB. SubBasis{MB. Monomial,MT,MVT},
17+ },
1418 }
1519 domain:: DT
16- monomials :: MVT
20+ basis :: MB.SubBasis{MB.Monomial,MT, MVT}
1721end
1822
1923function MOI. Bridges. Constraint. bridge_constraint (
20- :: Type{ZeroPolynomialInAlgebraicSetBridge{T,F,BT ,DT,MT,MVT}} ,
24+ :: Type{ZeroPolynomialInAlgebraicSetBridge{T,F,Z ,DT,MT,MVT}} ,
2125 model:: MOI.ModelLike ,
2226 f:: MOI.AbstractVectorFunction ,
23- s:: PolyJuMP.ZeroPolynomialSet{<:SS.AbstractAlgebraicSet} ,
24- ) where {T,F,BT,DT,MT,MVT}
25- p = MP. polynomial (MOI. Utilities. scalarize (f), s. monomials)
27+ s:: PolyJuMP.ZeroPolynomialSet {
28+ <: SS.AbstractAlgebraicSet ,
29+ Z,
30+ MB. SubBasis{MB. Monomial,MT,MVT},
31+ },
32+ ) where {T,F,Z,DT,MT,MVT}
33+ p = MP. polynomial (MOI. Utilities. scalarize (f), s. basis)
2634 # As `*(::MOI.ScalarAffineFunction{T}, ::S)` is only defined if `S == T`, we
2735 # need to call `similar`. This is critical since `T` is
2836 # `Float64` when used with JuMP and the coefficient type is often `Int` with
@@ -32,12 +40,16 @@ function MOI.Bridges.Constraint.bridge_constraint(
3240 zero_constraint = MOI. add_constraint (
3341 model,
3442 MOI. Utilities. vectorize (MP. coefficients (r)),
35- PolyJuMP. ZeroPolynomialSet (SS. FullSpace (), s. basis, MP. monomials (r)),
43+ PolyJuMP. ZeroPolynomialSet (
44+ SS. FullSpace (),
45+ s. zero_basis,
46+ MB. SubBasis {MB.Monomial} (MP. monomials (r)),
47+ ),
3648 )
37- return ZeroPolynomialInAlgebraicSetBridge {T,F,BT ,DT,MT,MVT} (
49+ return ZeroPolynomialInAlgebraicSetBridge {T,F,Z ,DT,MT,MVT} (
3850 zero_constraint,
3951 s. domain,
40- s. monomials ,
52+ s. basis ,
4153 )
4254end
4355
@@ -48,42 +60,60 @@ function MOI.supports_constraint(
4860) where {T}
4961 return true
5062end
63+
5164function MOI. Bridges. added_constrained_variable_types (
5265 :: Type{<:ZeroPolynomialInAlgebraicSetBridge} ,
5366)
5467 return Tuple{Type}[]
5568end
69+
5670function MOI. Bridges. added_constraint_types (
57- :: Type{<:ZeroPolynomialInAlgebraicSetBridge{T,F,BT,DT,MT,MVT}} ,
58- ) where {T,F,BT,DT,MT,MVT}
59- return [(F, PolyJuMP. ZeroPolynomialSet{SS. FullSpace,BT,MT,MVT})]
71+ :: Type{<:ZeroPolynomialInAlgebraicSetBridge{T,F,Z,DT,MT,MVT}} ,
72+ ) where {T,F,Z,DT,MT,MVT}
73+ return [(
74+ F,
75+ PolyJuMP. ZeroPolynomialSet{
76+ SS. FullSpace,
77+ Z,
78+ MB. SubBasis{MB. Monomial,MT,MVT},
79+ },
80+ )]
6081end
82+
6183function MOI. Bridges. Constraint. concrete_bridge_type (
6284 :: Type{<:ZeroPolynomialInAlgebraicSetBridge{T}} ,
6385 F:: Type{<:MOI.AbstractVectorFunction} ,
64- :: Type{<:PolyJuMP.ZeroPolynomialSet{DT,BT, MT,MVT}} ,
65- ) where {T,BT ,DT<: SS.AbstractAlgebraicSet ,MT,MVT}
86+ :: Type{<:PolyJuMP.ZeroPolynomialSet{DT,Z,MB.SubBasis{MB.Monomial, MT,MVT} }} ,
87+ ) where {T,Z ,DT<: SS.AbstractAlgebraicSet ,MT,MVT}
6688 G = MOI. Utilities. promote_operation (- , T, F, F)
67- return ZeroPolynomialInAlgebraicSetBridge{T,G,BT ,DT,MT,MVT}
89+ return ZeroPolynomialInAlgebraicSetBridge{T,G,Z ,DT,MT,MVT}
6890end
6991
7092# Attributes, Bridge acting as an model
7193function MOI. get (
72- :: ZeroPolynomialInAlgebraicSetBridge{T,F,BT ,DT,MT,MVT} ,
94+ :: ZeroPolynomialInAlgebraicSetBridge{T,F,Z ,DT,MT,MVT} ,
7395 :: MOI.NumberOfConstraints {
7496 F,
75- PolyJuMP. ZeroPolynomialSet{SS. FullSpace,BT,MT,MVT},
97+ PolyJuMP. ZeroPolynomialSet{
98+ SS. FullSpace,
99+ Z,
100+ MB. SubBasis{MB. Monomial,MT,MVT},
101+ },
76102 },
77- ) where {T,F,BT ,DT,MT,MVT}
103+ ) where {T,F,Z ,DT,MT,MVT}
78104 return 1
79105end
80106function MOI. get (
81- b:: ZeroPolynomialInAlgebraicSetBridge{T,F,BT ,DT,MT,MVT} ,
107+ b:: ZeroPolynomialInAlgebraicSetBridge{T,F,Z ,DT,MT,MVT} ,
82108 :: MOI.ListOfConstraintIndices {
83109 F,
84- PolyJuMP. ZeroPolynomialSet{SS. FullSpace,BT,MT,MVT},
110+ PolyJuMP. ZeroPolynomialSet{
111+ SS. FullSpace,
112+ Z,
113+ MB. SubBasis{MB. Monomial,MT,MVT},
114+ },
85115 },
86- ) where {T,F,BT ,DT,MT,MVT}
116+ ) where {T,F,Z ,DT,MT,MVT}
87117 return [b. zero_constraint]
88118end
89119
@@ -102,8 +132,8 @@ function MOI.get(
102132 set = MOI. get (model, attr, bridge. zero_constraint)
103133 return PolyJuMP. ZeroPolynomialSet (
104134 bridge. domain,
105- set. basis ,
106- bridge. monomials ,
135+ set. zero_basis ,
136+ bridge. basis ,
107137 )
108138end
109139# TODO ConstraintPrimal
@@ -121,10 +151,11 @@ function MOI.get(
121151)
122152 dual = MOI. get (model, attr, bridge. zero_constraint)
123153 set = MOI. get (model, MOI. ConstraintSet (), bridge. zero_constraint)
124- μ = MM. measure (dual, set. monomials )
154+ μ = MM. measure (dual, set. basis )
125155 I = SS. ideal (bridge. domain)
126- return [dot (rem (mono, I), μ) for mono in bridge. monomials]
156+ return [dot (rem (mono, I), μ) for mono in bridge. basis . monomials]
127157end
158+
128159function MOI. get (
129160 model:: MOI.ModelLike ,
130161 attr:: PolyJuMP.MomentsAttribute ,
0 commit comments