From 463b472a04885c10bfb709fbbcd17557b97306f1 Mon Sep 17 00:00:00 2001 From: Sasha Demin Date: Fri, 25 Oct 2024 15:15:09 +0200 Subject: [PATCH] in Groebner Ext, partially fix ordering --- Project.toml | 2 +- ext/SymbolicsGroebnerExt.jl | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index 6842dd311..21c089bc3 100644 --- a/Project.toml +++ b/Project.toml @@ -69,7 +69,7 @@ DocStringExtensions = "0.9" DomainSets = "0.6, 0.7" DynamicPolynomials = "0.5, 0.6" ForwardDiff = "0.10.36" -Groebner = "0.5, 0.6, 0.7" +Groebner = "0.8" IfElse = "0.1" LaTeXStrings = "1.3" LambertW = "1.0.0" diff --git a/ext/SymbolicsGroebnerExt.jl b/ext/SymbolicsGroebnerExt.jl index fa89330ee..f8edaa568 100644 --- a/ext/SymbolicsGroebnerExt.jl +++ b/ext/SymbolicsGroebnerExt.jl @@ -33,9 +33,16 @@ julia> @variables x y; julia> groebner_basis([x*y^2 + x, x^2*y + y]) ``` """ -function Symbolics.groebner_basis(polynomials::Vector{Num}; kwargs...) +function Symbolics.groebner_basis(polynomials::Vector{Num}; ordering=InputOrdering(), kwargs...) polynoms, pvar2sym, sym2term = Symbolics.symbol_to_poly(polynomials) - basis = Groebner.groebner(polynoms; kwargs...) + sym2term_for_groebner = Dict{Any,Any}(v1 => k for (k, (v1, v2)) in sym2term) + all_sym_vars = Groebner.ordering_variables(ordering) + missed = setdiff(all_sym_vars, Set(collect(keys(sym2term_for_groebner)))) + for k in missed + sym2term_for_groebner[k] = k + end + ordering = Groebner.ordering_transform(ordering, sym2term_for_groebner ) + basis = Groebner.groebner(polynoms; ordering=ordering, kwargs...) PolyType = symtype(first(polynomials)) Symbolics.poly_to_symbol(basis, pvar2sym, sym2term, PolyType) end