@@ -292,32 +292,6 @@ StaticLinearMap{T,N,M}(A::AbstractMatrix) where {T,N,M} =
292292convert (:: Type{Map{SVector{N,T}}} , m:: VectorLinearMap ) where {N,T} = StaticLinearMap {T,N,N} (m. A)
293293
294294
295- # Implement the interface for abstract arrays,
296- # representing the linear map x->A*x
297- MapStyle (A:: AbstractArray ) = IsMap ()
298-
299- Map (A:: AbstractArray ) = LinearMap (A)
300- Map {T} (A:: AbstractArray ) where T = LinearMap {T} (A)
301-
302- domaintype (A:: AbstractArray ) = domaintype (Map (A))
303-
304- applymap (A:: AbstractArray , x) = A* x
305- mapsize (A:: AbstractArray ) = size (A)
306-
307- islinearmap (A:: AbstractArray ) = true
308- isaffinemap (A:: AbstractArray ) = true
309- affinematrix (A:: AbstractArray ) = A
310- affinevector (A:: AbstractArray ) = zerovector (A)
311-
312- inverse (A:: AbstractMatrix ) = inv (A)
313- inverse (A:: AbstractMatrix , x) = A \ x
314-
315- jacobian (A:: AbstractMatrix ) = ConstantMap {glm_domaintype(A)} (A)
316- jacobian (A:: AbstractMatrix , x) = A
317-
318- canonicalmap (A:: AbstractArray ) = Map (A)
319- canonicalmap (:: Equal , A:: AbstractArray ) = Map (A)
320-
321295
322296
323297
@@ -618,10 +592,68 @@ convert(::Type{Map{SVector{N,T}}}, m::VectorAffineMap) where {N,T} =
618592 StaticAffineMap {T,N} (m. A, m. b)
619593
620594
595+ # #############################
596+ # Numbers and arrays as a map
597+ # #############################
598+
599+ # Arrays represent the linear map A*x
600+ MapStyle (:: Type{<:AbstractArray} ) = IsMap ()
601+
602+ Map (A:: AbstractArray ) = LinearMap (A)
603+ Map {T} (A:: AbstractArray ) where T = LinearMap {T} (A)
604+
605+ domaintype (A:: AbstractArray ) = domaintype (Map (A))
606+
607+ applymap (A:: AbstractArray , x) = A* x
608+ mapsize (A:: AbstractArray ) = size (A)
609+
610+ islinearmap (A:: AbstractArray ) = true
611+ isaffinemap (A:: AbstractArray ) = true
612+ affinematrix (A:: AbstractArray ) = A
613+ affinevector (A:: AbstractArray ) = zerovector (A)
614+
615+ inverse (A:: AbstractMatrix ) = inv (A)
616+ inverse (A:: AbstractMatrix , x) = A \ x
617+
618+ jacobian (A:: AbstractMatrix ) = ConstantMap {glm_domaintype(A)} (A)
619+ jacobian (A:: AbstractMatrix , x) = A
620+
621+ canonicalmap (A:: AbstractArray ) = Map (A)
622+ canonicalmap (:: Equal , A:: AbstractArray ) = Map (A)
623+
624+ # Numbers represent the linear map a*x
625+
626+ MapStyle (:: Type{<:Number} ) = IsMap ()
627+
628+ applymap (a:: Number , x) = a* x
629+
630+ Map (a:: Number ) = LinearMap (a)
631+ Map {T} (a:: Number ) where T = LinearMap {T} (a)
632+ domaintype (a:: Number ) = typeof (a)
633+
634+ mapsize (a:: Number ) = ()
635+
636+ islinearmap (a:: Number ) = true
637+ isaffinemap (a:: Number ) = true
638+ affinematrix (a:: Number ) = a
639+ affinevector (a:: Number ) = zero (a)
640+
641+ inverse (a:: Number ) = inv (a)
642+ inverse (a:: Number , x) = a \ x
643+
644+ jacobian (a:: Number ) = ConstantMap (a)
645+ jacobian (a:: Number , x) = a
646+
647+ canonicalmap (a:: Number ) = Map (a)
648+ canonicalmap (:: Equal , a:: Number ) = Map (a)
649+
650+
621651# ##########################
622652# Uniform scaling as a map
623653# ##########################
624654
655+ MapStyle (:: Type{<:UniformScaling} ) = IsMap ()
656+
625657convert (:: Type{Map} , A:: UniformScaling ) = GenericLinearMap {Vector{Any}} (A)
626658convert (:: Type{Map{T}} , A:: UniformScaling ) where {T} = GenericLinearMap {T} (A)
627659
0 commit comments