Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ task:
matrix:
- name: FreeBSD
freebsd_instance:
image_family: freebsd-13-3
image_family: freebsd-14-2
env:
matrix:
- JULIA_VERSION: 1
Expand Down
30 changes: 18 additions & 12 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,37 +1,43 @@
name = "ExpressionTreeForge"
uuid = "93090adf-0e31-445f-8c8f-44d91f61d7ad"
authors = ["raynaudp "]
authors = ["raynaudp"]
version = "0.3.0"

[deps]
ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a"
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
NLPModelsJuMP = "792afdf1-32c1-5681-94e0-d7bf7a5df49e"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[weakdeps]
ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
NLPModelsJuMP = "792afdf1-32c1-5681-94e0-d7bf7a5df49e"
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"

[extensions]
ExpressionTreeForgeJuMPExt = "JuMP"
ExpressionTreeForgeADNLPModelsExt = ["ADNLPModels", "Symbolics"]
ExpressionTreeForgeNLPModelsJuMPExt = "NLPModelsJuMP"

[compat]
ADNLPModels = "0.8"
ForwardDiff = "0.10,1"
LinearAlgebra = "1.10"
JuMP = "1"
MathOptInterface = "1"
NLPModelsJuMP = "0.13"
OptimizationProblems = "0.9"
ReverseDiff = "1.14"
Symbolics = "5,6"
julia = "^1.10.0"
SparseArrays = "1.10"
Symbolics = "6"
Test = "1.10"
julia = "1.10"

[extras]
ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a"
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
NLPModelsJuMP = "792afdf1-32c1-5681-94e0-d7bf7a5df49e"
OptimizationProblems = "5049e819-d29b-5fba-b941-0eee7e64c1c6"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "SparseArrays", "MathOptInterface", "Symbolics", "ADNLPModels", "OptimizationProblems", "NLPModelsJuMP"]
test = ["ADNLPModels", "OptimizationProblems", "NLPModelsJuMP", "JuMP", "Symbolics", "Test"]
16 changes: 16 additions & 0 deletions ext/ExpressionTreeForgeADNLPModelsExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module ExpressionTreeForgeADNLPModelsExt

import ExpressionTreeForge
import ADNLPModels
import Symbolics

function ExpressionTreeForge.get_expression_tree(adnlp::ADNLPModels.ADNLPModel)
n = adnlp.meta.nvar
Symbolics.@variables x[1:n]
fun = adnlp.f(x)
obj_Expr = Symbolics._toexpr(fun)
expr_tree = ExpressionTreeForge.transform_to_expr_tree(obj_Expr)::ExpressionTreeForge.Type_expr_tree
return expr_tree
end

end
18 changes: 18 additions & 0 deletions ext/ExpressionTreeForgeJuMPExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module ExpressionTreeForgeJuMPExt

import ExpressionTreeForge
import JuMP
import MathOptInterface as MOI

function ExpressionTreeForge.get_expression_tree(model::JuMP.Model)
nlp = JuMP.nonlinear_model(model; force = true)
evaluator = MOI.Nonlinear.Evaluator(nlp)
F = MOI.get(model, MOI.ObjectiveFunctionType())
MOI.get(model, MOI.ObjectiveFunction{F}())
if F <: MOI.ScalarNonlinearFunction
MOI.Nonlinear.set_objective(nlp, MOI.get(model, MOI.ObjectiveFunction{F}()))
end
return ExpressionTreeForge.get_expression_tree(evaluator)
end

end
8 changes: 8 additions & 0 deletions ext/ExpressionTreeForgeNLPModelsJuMPExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module ExpressionTreeForgeNLPModelsJuMPExt

import ExpressionTreeForge
import NLPModelsJuMP

ExpressionTreeForge.get_expression_tree(nlp::NLPModelsJuMP.MathOptNLPModel) = ExpressionTreeForge.get_expression_tree(nlp.eval)

end
3 changes: 1 addition & 2 deletions src/ExpressionTreeForge.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module ExpressionTreeForge

include("get_expression_tree.jl")
include("type_expr/ordered_include.jl")
include("node_expr_tree/ordered_include.jl")
include("tree/ordered_include.jl")
Expand All @@ -12,8 +13,6 @@ using .M_bound_propagations, .M_convexity_detection

include("export.jl")

include("NLPSupport/ordered_include.jl")

export create_bounds_tree, get_bounds, set_bounds!
export Type_node, Complete_expr_tree, Pre_compiled_tree, Pre_n_compiled_tree, Type_calculus_tree
export concave_type, constant_type, convex_type, linear_type, not_treated_type, unknown_type
Expand Down
44 changes: 0 additions & 44 deletions src/NLPSupport/get_expr_tree.jl

This file was deleted.

1 change: 0 additions & 1 deletion src/NLPSupport/ordered_include.jl

This file was deleted.

23 changes: 23 additions & 0 deletions src/get_expression_tree.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import MathOptInterface as MOI

"""
expr = get_expression_tree(monlp::MathOptNLPModel)
expr = get_expression_tree(adnlp::ADNLPModel)
expr = get_expression_tree(model::JuMP.Model)
expr = get_expression_tree(evaluator::MOI.Nonlinear.Evaluator)

Return the objective function as a `Type_expr_tree` for: a `MathOptNLPModel`, a `ADNLPModel`, a `JuMP.Model` or a `MOI.Nonlinear.Evaluator`.
"""
function get_expression_tree end

function get_expression_tree(evaluator::MOI.Nonlinear.Evaluator)
MOI.initialize(evaluator, [:ExprGraph])
obj_Expr = MOI.objective_expr(evaluator)::Expr
expr_tree = ExpressionTreeForge.transform_to_expr_tree(obj_Expr)::ExpressionTreeForge.Type_expr_tree
return expr_tree
end

function ExpressionTreeForge.get_expression_tree(model::MOI.Nonlinear.Model)
evaluator = MOI.Nonlinear.Evaluator(model)
return ExpressionTreeForge.get_expression_tree(evaluator)
end
3 changes: 2 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using LinearAlgebra, SparseArrays, Test
using JuMP, MathOptInterface, Symbolics
using JuMP, MathOptInterface
using ADNLPModels, Symbolics
using ExpressionTreeForge

const MOI = MathOptInterface
Expand Down
Loading