From f68bf1cfa3071f39df7fbd18a117789f4aef720f Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson Date: Thu, 16 Jan 2025 13:11:36 +0100 Subject: [PATCH] avoid some type issues arising with Symbolics `D` was reshaped without need, resulting in a reshapearray which leads to downstream inference problems --- lib/ControlSystemsBase/src/types/StateSpace.jl | 5 ++--- lib/ControlSystemsBase/src/types/conversion.jl | 3 ++- lib/ControlSystemsBase/src/types/zpk.jl | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/ControlSystemsBase/src/types/StateSpace.jl b/lib/ControlSystemsBase/src/types/StateSpace.jl index 50ba042eb..a58967956 100644 --- a/lib/ControlSystemsBase/src/types/StateSpace.jl +++ b/lib/ControlSystemsBase/src/types/StateSpace.jl @@ -113,14 +113,13 @@ function StateSpace(D::AbstractArray{T}, timeevol::TimeEvolution) where {T<:Numb A = zeros(T, 0, 0) B = zeros(T, 0, nu) C = zeros(T, ny, 0) - D = reshape(D, (ny,nu)) return StateSpace(A, B, C, D, timeevol) end StateSpace(D::AbstractArray, Ts::Number) = StateSpace(D, Discrete(Ts)) StateSpace(D::AbstractArray) = StateSpace(D, Continuous()) -StateSpace(d::Number, Ts::Number; kwargs...) = StateSpace([d], Discrete(Ts)) -StateSpace(d::Number; kwargs...) = StateSpace([d], Continuous()) +StateSpace(d::Number, Ts::Number; kwargs...) = StateSpace([d;;], Discrete(Ts)) +StateSpace(d::Number; kwargs...) = StateSpace([d;;], Continuous()) # StateSpace(sys) converts to StateSpace diff --git a/lib/ControlSystemsBase/src/types/conversion.jl b/lib/ControlSystemsBase/src/types/conversion.jl index 0eb8cc5c0..c43808f2c 100644 --- a/lib/ControlSystemsBase/src/types/conversion.jl +++ b/lib/ControlSystemsBase/src/types/conversion.jl @@ -82,7 +82,8 @@ Base.convert(::Type{StateSpace}, s::HeteroStateSpace) = StateSpace(s.A, s.B, s.C Base.convert(::Type{StateSpace}, s::HeteroStateSpace{Continuous}) = StateSpace(s.A, s.B, s.C, s.D) function Base.convert(::Type{StateSpace}, G::TransferFunction{TE,<:SisoTf{T0}}; kwargs...) where {TE,T0<:Number} - T = Base.promote_op(/,T0,T0) + ONE = one(T0) + T = typeof(ONE/ONE) convert(StateSpace{TE,T}, G; kwargs...) end diff --git a/lib/ControlSystemsBase/src/types/zpk.jl b/lib/ControlSystemsBase/src/types/zpk.jl index 70d8792ec..50bb77bcc 100644 --- a/lib/ControlSystemsBase/src/types/zpk.jl +++ b/lib/ControlSystemsBase/src/types/zpk.jl @@ -69,8 +69,8 @@ function zpk(G::TransferFunction{TE,S}) where {TE<:TimeEvolution,T0, S<:SisoTf{T convert(TransferFunction{TE,SisoZpk{T, complex(T)}}, G) end -zpk(var::AbstractString) = zpk(tf(var)) -zpk(var::AbstractString, Ts::Real) = zpk(tf(var, Ts)) +zpk(var::Union{AbstractString, Char}) = zpk(tf(var)) +zpk(var::Union{AbstractString, Char}, Ts::Real) = zpk(tf(var, Ts)) # Catch all 3(4) argument versions zpk(z, p, k, Ts::Number) = zpk(z, p, k, Discrete(Ts))