Skip to content

Commit e92a60b

Browse files
authored
Backend API Refinements (infiniteopt#351)
* change object number terminology * many improvements * remove set_names_on_creation
1 parent db449cc commit e92a60b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1760
-1519
lines changed

docs/src/develop/extensions.md

+3-26
Original file line numberDiff line numberDiff line change
@@ -755,22 +755,14 @@ extended using the following steps:
755755
5. If appropriate and NOT a [`JuMPBackend`](@ref), extend the following:
756756
- [`transformation_model`](@ref transformation_model(::AbstractTransformationBackend))
757757
- [`transformation_data`](@ref transformation_data(::AbstractTransformationBackend))
758-
- [`JuMP.set_attribute`](@ref JuMP.set_attribute(::AbstractTransformationBackend, ::Any, ::Any))
759-
- [`JuMP.get_attribute`](@ref JuMP.get_attribute(::AbstractTransformationBackend, ::Any))
758+
- [`JuMP.set_attribute`](@ref JuMP.set_attribute(::AbstractTransformationBackend, ::Any, ::Any)) (including the suggested attributes)
759+
- [`JuMP.get_attribute`](@ref JuMP.get_attribute(::AbstractTransformationBackend, ::Any)) (including the suggested attributes)
760760
- [`JuMP.optimize!`](@ref JuMP.optimize!(::AbstractTransformationBackend))
761761
- [`JuMP.set_optimizer`](@ref JuMP.set_optimizer(::AbstractTransformationBackend, ::Any))
762-
- [`JuMP.set_silent`](@ref JuMP.set_silent(::AbstractTransformationBackend))
763-
- [`JuMP.unset_silent`](@ref JuMP.unset_silent(::AbstractTransformationBackend))
764-
- [`JuMP.set_time_limit_sec`](@ref JuMP.set_time_limit_sec(::AbstractTransformationBackend, ::Any))
765-
- [`JuMP.time_limit_sec`](@ref JuMP.time_limit_sec(::AbstractTransformationBackend))
766-
- [`JuMP.unset_time_limit_sec`](@ref JuMP.unset_time_limit_sec(::AbstractTransformationBackend))
767-
- [`JuMP.solver_name`](@ref JuMP.solver_name(::AbstractTransformationBackend))
768762
- [`JuMP.bridge_constraints`](@ref JuMP.bridge_constraints(::AbstractTransformationBackend))
769763
- [`JuMP.add_bridge`](@ref JuMP.add_bridge(::AbstractTransformationBackend, ::Any))
770764
- [`JuMP.print_active_bridges`](@ref JuMP.print_active_bridges(::IO,::AbstractTransformationBackend))
771765
- [`JuMP.print_active_bridges`](@ref JuMP.print_active_bridges(::IO,::AbstractTransformationBackend))
772-
- [`JuMP.set_string_names_on_creation`](@ref JuMP.set_string_names_on_creation(::AbstractTransformationBackend))
773-
- [`JuMP.set_string_names_on_creation`](@ref JuMP.set_string_names_on_creation(::AbstractTransformationBackend, ::Any))
774766
- [`JuMP.compute_conflict!`](@ref JuMP.compute_conflict!(::AbstractTransformationBackend))
775767
- [`JuMP.copy_conflict`](@ref JuMP.copy_conflict(::AbstractTransformationBackend))
776768
- [`JuMP.mode`](@ref JuMP.mode(::AbstractTransformationBackend))
@@ -785,21 +777,7 @@ extended using the following steps:
785777
- [`InfiniteOpt.expression_supports`](@ref)
786778
- [`InfiniteOpt.constraint_supports`](@ref)
787779
8. As appropriate and if NOT a `JuMPBackend`, extend the following:
788-
- [`JuMP.termination_status`](@ref JuMP.termination_status(::AbstractTransformationBackend))
789-
- [`JuMP.raw_status`](@ref JuMP.raw_status(::AbstractTransformationBackend))
790-
- [`JuMP.solve_time`](@ref JuMP.solve_time(::AbstractTransformationBackend))
791-
- [`JuMP.simplex_iterations`](@ref JuMP.simplex_iterations(::AbstractTransformationBackend))
792-
- [`JuMP.barrier_iterations`](@ref JuMP.barrier_iterations(::AbstractTransformationBackend))
793-
- [`JuMP.node_count`](@ref JuMP.node_count(::AbstractTransformationBackend))
794-
- [`JuMP.objective_bound`](@ref JuMP.objective_bound(::AbstractTransformationBackend))
795-
- [`JuMP.relative_gap`](@ref JuMP.relative_gap(::AbstractTransformationBackend))
796-
- [`JuMP.result_count`](@ref JuMP.result_count(::AbstractTransformationBackend))
797-
- [`JuMP.primal_status`](@ref JuMP.primal_status(::AbstractTransformationBackend))
798-
- [`JuMP.dual_status`](@ref JuMP.dual_status(::AbstractTransformationBackend))
799-
- [`JuMP.has_values`](@ref JuMP.has_values(::AbstractTransformationBackend))
800-
- [`JuMP.has_duals`](@ref JuMP.has_duals(::AbstractTransformationBackend))
801-
- [`JuMP.objective_value`](@ref JuMP.objective_value(::AbstractTransformationBackend))
802-
- [`JuMP.dual_objective_value`](@ref JuMP.dual_objective_value(::AbstractTransformationBackend))
780+
- The remaining result related attributes listed in [`JuMP.get_attribute`](@ref JuMP.get_attribute(::AbstractTransformationBackend, ::Any))
803781
- [`JuMP.lp_sensitivity_report`](@ref JuMP.lp_sensitivity_report(::AbstractTransformationBackend))
804782
9. If Step 6 was skipped and/or the backend is NOT a `JuMPBackend` then extend the following:
805783
- [`InfiniteOpt.map_value`](@ref) (enables `JuMP.value`)
@@ -1067,7 +1045,6 @@ are enabled via Step 6 where we extend:
10671045
- [`transformation_variable`](@ref transformation_variable(::GeneralVariableRef, ::AbstractTransformationBackend))
10681046
- [`transformation_expression`](@ref transformation_expression(::Any, ::AbstractTransformationBackend))
10691047
- [`transformation_constraint`](@ref transformation_constraint(::InfOptConstraintRef, ::AbstractTransformationBackend))
1070-
[`transformation_expression`](@ref), and [`transformation_constraint`](@ref)
10711048
to return the variable(s)/expression(s)/constraint(s) in the backend.
10721049
These will use the `DeterministicData` and should error if no mapping can be
10731050
found.

docs/src/guide/derivative.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
```@meta
22
DocTestFilters = [r"≥|>=", r" == | = ", r" ∈ | in ", r" for all | ∀ ", r"d|∂",
3-
r"integral|∫", r".*scalar_parameters.jl:790"]
3+
r"integral|∫", r".*scalar_parameters.jl:785"]
44
```
55

66
# [Derivative Operators](@id deriv_docs)
@@ -503,7 +503,7 @@ julia> derivative_constraints(d1)
503503
504504
julia> add_supports(t, 0.2)
505505
┌ Warning: Support/method changes will invalidate existing derivative evaluation constraints that have been added to the InfiniteModel. Thus, these are being deleted.
506-
└ @ InfiniteOpt ~/work/infiniteopt/InfiniteOpt.jl/src/scalar_parameters.jl:790
506+
└ @ InfiniteOpt ~/work/infiniteopt/InfiniteOpt.jl/src/scalar_parameters.jl:785
507507
508508
julia> has_derivative_constraints(d1)
509509
false

docs/src/manual/backend.md

+2-12
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@ supports(::InfOptConstraintRef)
2424
JuMP.set_optimizer(::InfiniteModel, ::Any)
2525
JuMP.set_silent(::InfiniteModel)
2626
JuMP.unset_silent(::InfiniteModel)
27-
JuMP.set_time_limit_sec(::InfiniteModel, ::Any)
27+
JuMP.set_time_limit_sec(::InfiniteModel, ::Real)
2828
JuMP.unset_time_limit_sec(::InfiniteModel)
2929
JuMP.time_limit_sec(::InfiniteModel)
3030
JuMP.solver_name(model::InfiniteModel)
3131
JuMP.mode(::InfiniteModel)
3232
JuMP.compute_conflict!(::InfiniteModel)
3333
JuMP.copy_conflict(::InfiniteModel)
34-
JuMP.set_string_names_on_creation(::InfiniteModel)
35-
JuMP.set_string_names_on_creation(::InfiniteModel, ::Any)
3634
JuMP.bridge_constraints(::InfiniteModel)
3735
JuMP.add_bridge(::InfiniteModel, ::Any)
3836
JuMP.print_active_bridges(::IO, ::InfiniteModel, ::Vararg{Any})
@@ -57,25 +55,17 @@ Base.empty!(::AbstractTransformationBackend)
5755
build_transformation_backend!(::InfiniteModel, ::AbstractTransformationBackend)
5856
JuMP.optimize!(::AbstractTransformationBackend)
5957
JuMP.set_optimizer(::AbstractTransformationBackend, ::Any)
60-
JuMP.set_silent(::AbstractTransformationBackend)
61-
JuMP.unset_silent(::AbstractTransformationBackend)
62-
JuMP.set_time_limit_sec(::AbstractTransformationBackend, ::Any)
63-
JuMP.unset_time_limit_sec(::AbstractTransformationBackend)
64-
JuMP.time_limit_sec(::AbstractTransformationBackend)
65-
JuMP.solver_name(model::AbstractTransformationBackend)
6658
JuMP.mode(::AbstractTransformationBackend)
6759
JuMP.compute_conflict!(::AbstractTransformationBackend)
6860
JuMP.copy_conflict(::AbstractTransformationBackend)
69-
JuMP.set_string_names_on_creation(::AbstractTransformationBackend)
70-
JuMP.set_string_names_on_creation(::AbstractTransformationBackend, ::Any)
7161
JuMP.bridge_constraints(::AbstractTransformationBackend)
7262
JuMP.add_bridge(::AbstractTransformationBackend, ::Any)
7363
JuMP.print_active_bridges(::IO, ::AbstractTransformationBackend, ::Vararg{Any})
7464
JuMP.print_bridge_graph(::IO, ::AbstractTransformationBackend)
7565
JuMP.backend(::AbstractTransformationBackend)
7666
JuMP.unsafe_backend(::AbstractTransformationBackend)
7767
transformation_variable(::GeneralVariableRef, ::AbstractTransformationBackend)
78-
transformation_expression(::JuMP.AbstractJuMPScalar, ::AbstractTransformationBackend)
68+
transformation_expression(::Any, ::AbstractTransformationBackend)
7969
transformation_constraint(::InfOptConstraintRef, ::AbstractTransformationBackend)
8070
variable_supports(::Any, ::AbstractTransformationBackend)
8171
expression_supports(::Any, ::AbstractTransformationBackend)

docs/src/manual/constraint.md

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ has_domain_restrictions
3333
domain_restrictions
3434
JuMP.normalized_rhs(::InfOptConstraintRef)
3535
JuMP.normalized_coefficient(::InfOptConstraintRef, ::GeneralVariableRef)
36+
parameter_group_int_indices(::InfOptConstraintRef)
37+
core_object(::InfOptConstraintRef)
38+
is_variable_domain_constraint
3639
```
3740

3841
## Modification

docs/src/manual/derivative.md

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ all_derivatives
2727
parameter_refs(::DerivativeRef)
2828
parameter_list(::DerivativeRef)
2929
raw_parameter_refs(::DerivativeRef)
30+
parameter_group_int_indices(::DerivativeRef)
31+
core_object(::DerivativeRef)
3032
```
3133

3234
## Modification

docs/src/manual/expression.md

+9-5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ used_by_semi_infinite_variable(::ParameterFunctionRef)
2828
used_by_derivative(::ParameterFunctionRef)
2929
used_by_measure(::ParameterFunctionRef)
3030
used_by_constraint(::ParameterFunctionRef)
31+
parameter_group_int_indices(::ParameterFunctionRef)
3132
```
3233

3334
### Modification
@@ -57,6 +58,8 @@ parameter_refs(::Union{JuMP.GenericAffExpr, JuMP.GenericNonlinearExpr, JuMP.Gene
5758
restrict(::JuMP.AbstractJuMPScalar)
5859
map_expression
5960
map_expression_to_ast
61+
all_expression_variables
62+
parameter_group_int_indices(::Any)
6063
```
6164

6265
## GeneralVariableRef User Methods
@@ -158,6 +161,11 @@ JuMP.set_integer(::GeneralVariableRef)
158161
JuMP.IntegerRef(::GeneralVariableRef)
159162
JuMP.unset_integer(::GeneralVariableRef)
160163
constant_over_collocation(::GeneralVariableRef, ::GeneralVariableRef)
164+
core_object
165+
core_object(::GeneralVariableRef)
166+
parameter_group_int_indices(::GeneralVariableRef)
167+
InfiniteOpt.parameter_group_int_index
168+
InfiniteOpt.parameter_group_int_index(::GeneralVariableRef)
161169
```
162170

163171
## Developer Internal Methods
@@ -166,9 +174,7 @@ InfiniteOpt._add_data_object
166174
InfiniteOpt._data_dictionary
167175
InfiniteOpt._data_object
168176
InfiniteOpt._delete_data_object
169-
InfiniteOpt._core_variable_object
170-
InfiniteOpt._core_variable_object(::GeneralVariableRef)
171-
InfiniteOpt._set_core_variable_object
177+
InfiniteOpt._set_core_object
172178
InfiniteOpt._infinite_variable_dependencies
173179
InfiniteOpt._infinite_variable_dependencies(::GeneralVariableRef)
174180
InfiniteOpt._semi_infinite_variable_dependencies
@@ -187,6 +193,4 @@ InfiniteOpt._derivative_constraint_dependencies
187193
InfiniteOpt._derivative_constraint_dependencies(::GeneralVariableRef)
188194
InfiniteOpt._parameter_number
189195
InfiniteOpt._parameter_number(::GeneralVariableRef)
190-
InfiniteOpt._object_number
191-
InfiniteOpt._object_number(::GeneralVariableRef)
192196
```

docs/src/manual/finite_parameter.md

+1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ methods available for finite parameters (i.e., any method typed for
2222
parameter_value(::FiniteParameterRef)
2323
JuMP.set_value(::FiniteParameterRef, ::Real)
2424
used_by_objective(::FiniteParameterRef)
25+
core_object(::FiniteParameterRef)
2526
```

docs/src/manual/measure.md

+2
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ used_by_derivative(::MeasureRef)
103103
used_by_constraint(::MeasureRef)
104104
used_by_measure(::MeasureRef)
105105
used_by_objective(::MeasureRef)
106+
core_object(::MeasureRef)
107+
parameter_group_int_indices(::MeasureRef)
106108
```
107109

108110
## Modification

docs/src/manual/model.md

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ JuMP.object_dictionary(::InfiniteModel)
1010
has_internal_supports
1111
Base.empty!(::InfiniteModel)
1212
JuMP.set_optimize_hook(::InfiniteModel, ::Union{Function, Nothing})
13+
parameter_refs(::InfiniteModel)
14+
parameter_group_indices
1315
```
1416

1517
## Abstract Dependencies

docs/src/manual/parameter.md

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ used_by_parameter_function(::IndependentParameterRef)
5858
used_by_derivative(::IndependentParameterRef)
5959
used_by_measure(::ScalarParameterRef)
6060
used_by_constraint(::ScalarParameterRef)
61+
parameter_group_int_index(::IndependentParameterRef)
62+
core_object(::IndependentParameterRef)
6163
```
6264

6365
### Dependent Parameters
@@ -83,6 +85,8 @@ used_by_parameter_function(::DependentParameterRef)
8385
used_by_derivative(::DependentParameterRef)
8486
used_by_measure(::DependentParameterRef)
8587
used_by_constraint(::DependentParameterRef)
88+
parameter_group_int_index(::DependentParameterRef)
89+
core_object(::DependentParameterRef)
8690
```
8791

8892
## Modification

docs/src/manual/result.md

+1-15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ JuMP.termination_status(::InfiniteModel)
88
JuMP.raw_status(::InfiniteModel)
99
JuMP.primal_status(::InfiniteModel)
1010
JuMP.dual_status(::InfiniteModel)
11+
JuMP.is_solved_and_feasible(::InfiniteModel)
1112
```
1213

1314
## General
@@ -57,25 +58,10 @@ InfOptSensitivityReport
5758

5859
## Transformation Backend Extension API
5960
```@docs
60-
JuMP.termination_status(::AbstractTransformationBackend)
61-
JuMP.raw_status(::AbstractTransformationBackend)
62-
JuMP.primal_status(::AbstractTransformationBackend)
63-
JuMP.dual_status(::AbstractTransformationBackend)
64-
JuMP.solve_time(::AbstractTransformationBackend)
65-
JuMP.relative_gap(::AbstractTransformationBackend)
66-
JuMP.simplex_iterations(::AbstractTransformationBackend)
67-
JuMP.barrier_iterations(::AbstractTransformationBackend)
68-
JuMP.node_count(::AbstractTransformationBackend)
69-
JuMP.result_count(::AbstractTransformationBackend)
70-
JuMP.objective_bound(::AbstractTransformationBackend)
71-
JuMP.objective_value(::AbstractTransformationBackend)
72-
JuMP.dual_objective_value(::AbstractTransformationBackend)
73-
JuMP.has_values(::AbstractTransformationBackend)
7461
map_value(::Any, ::AbstractTransformationBackend)
7562
map_infinite_parameter_value
7663
map_reduced_cost(::GeneralVariableRef, ::AbstractTransformationBackend)
7764
map_optimizer_index(::GeneralVariableRef, ::AbstractTransformationBackend)
78-
JuMP.has_duals(::AbstractTransformationBackend)
7965
map_dual(::InfOptConstraintRef, ::AbstractTransformationBackend)
8066
map_shadow_price(::InfOptConstraintRef, ::AbstractTransformationBackend)
8167
map_optimizer_index(::InfOptConstraintRef, ::AbstractTransformationBackend)

docs/src/manual/variable.md

+10
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ is_used(::Union{InfiniteVariableRef, DerivativeRef})
9191
used_by_derivative(::Union{DerivativeRef, InfiniteVariableRef})
9292
used_by_point_variable(::Union{InfiniteVariableRef, DerivativeRef})
9393
used_by_semi_infinite_variable(::Union{InfiniteVariableRef, DerivativeRef})
94+
parameter_group_int_indices(::InfiniteVariableRef)
95+
core_object(::InfiniteVariableRef)
9496
```
9597

9698
### Semi-Infinite
@@ -116,13 +118,21 @@ raw_parameter_refs(::SemiInfiniteVariableRef)
116118
eval_supports(::SemiInfiniteVariableRef)
117119
is_used(::SemiInfiniteVariableRef)
118120
used_by_derivative(::SemiInfiniteVariableRef)
121+
parameter_group_int_indices(::SemiInfiniteVariableRef)
122+
core_object(::SemiInfiniteVariableRef)
119123
```
120124

121125
### Point
122126
```@docs
123127
infinite_variable_ref(::PointVariableRef)
124128
parameter_values(::PointVariableRef)
125129
raw_parameter_values(::PointVariableRef)
130+
core_object(::PointVariableRef)
131+
```
132+
133+
### Finite
134+
```@docs
135+
core_object(::FiniteVariableRef)
126136
```
127137

128138
## Modification

src/TranscriptionOpt/measures.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function InfiniteOpt.add_point_variable(
2525
inf_model = JuMP.owner_model(ivref)
2626
inf_model_index = get(inf_model.point_lookup, (ivref, support), nothing)
2727
if !isnothing(inf_model_index)
28-
return InfiniteOpt._make_variable_ref(inf_model, inf_model_index)
28+
return InfiniteOpt.GeneralVariableRef(inf_model, inf_model_index)
2929
else
3030
# make negative index to not conflict with the InfiniteModel
3131
raw_index = data.last_point_index -= 1
@@ -66,7 +66,7 @@ function InfiniteOpt.add_semi_infinite_variable(
6666
inf_model = JuMP.owner_model(ivref)
6767
inf_model_index = get(inf_model.semi_lookup, (ivref, eval_supps), nothing)
6868
if !isnothing(inf_model_index)
69-
return InfiniteOpt._make_variable_ref(inf_model, inf_model_index)
69+
return InfiniteOpt.GeneralVariableRef(inf_model, inf_model_index)
7070
else
7171
# make negative index to not conflict with the InfiniteModel
7272
semi_infinite_vars = data.semi_infinite_vars

0 commit comments

Comments
 (0)