From 7218598528a768902dc80efd004213ab1b82c7ba Mon Sep 17 00:00:00 2001 From: Tommy Hofmann Date: Tue, 14 May 2024 17:45:40 +0200 Subject: [PATCH] adjust --- src/generic/PolyRingHom.jl | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/generic/PolyRingHom.jl b/src/generic/PolyRingHom.jl index 1b049134d6..0d23842238 100644 --- a/src/generic/PolyRingHom.jl +++ b/src/generic/PolyRingHom.jl @@ -127,10 +127,8 @@ function compose(F::PolyRingAnyMap{D, C, <: Function}, G::PolyRingAnyMap{C, E, < end # Now compose with arbitrary maps - -# I technically cannot do the Nothing version - -# I can only do the Map version of the coefficient map has codomain C +# For now we only properly do the Map version of the coefficient map has codomain C +# Otherwise we bail out and return a generic CompositeMap function compose(F::PolyRingAnyMap{D, C, <: Map, <: Any}, G::S) where {D, C, S <: Map{C, <: Any}} codomain(F) === domain(G) || error("Incompatible (co)domain in composition") f = _coefficient_map(F) @@ -142,6 +140,7 @@ function compose(F::PolyRingAnyMap{D, C, <: Map, <: Any}, G::S) where {D, C, S < end end +# Special case for composing with the identity function compose(F::PolyRingAnyMap{D, C, <: Map, <: Any}, G::S) where {D, C, S <: Generic.IdentityMap{C}} codomain(F) === domain(G) || error("Incompatible (co)domain in composition") f = _coefficient_map(F) @@ -223,11 +222,13 @@ end # ################################################################################ -function _evaluate_plain(F::PolyRingAnyMap{<: PolyRing}, u) +# if the coefficient map is nothing +function _evaluate_help(F::PolyRingAnyMap{<: PolyRing, <: Any, Nothing}, g) return u(F.img_gen) end -function _evaluate_general(F::PolyRingAnyMap{<: PolyRing}, u) +# general case +function _evaluate_help(F::PolyRingAnyMap{<: PolyRing, <: Any, <: Any}, g) @assert !(_coefficient_map(F) isa Nothing) S = temp_ring(F) if S !== nothing @@ -237,16 +238,6 @@ function _evaluate_general(F::PolyRingAnyMap{<: PolyRing}, u) end end -# one more intermediate function - -function _evaluate_help(F::PolyRingAnyMap{<: PolyRing, <: Any, Nothing}, g) - return _evaluate_plain(F, g) -end - -function _evaluate_help(F::PolyRingAnyMap{<: PolyRing, <: Any, <: Any}, g) - return _evaluate_general(F, g) -end - function (F::PolyRingAnyMap{<: PolyRing})(g) if g isa elem_type(domain(F)) _evaluate_help(F, g)