@@ -5,45 +5,44 @@ for Typ in (:Ldiv, :Rdiv)
55 B:: BType
66 end
77
8- $ Typ {StyleA, StyleB} (A:: AType , B:: BType ) where {StyleA,StyleB,AType,BType} =
8+ @inline $ Typ {StyleA, StyleB} (A:: AType , B:: BType ) where {StyleA,StyleB,AType,BType} =
99 $ Typ {StyleA,StyleB,AType,BType} (A,B)
1010
11- $ Typ (A:: AType , B:: BType ) where {AType,BType} =
11+ @inline $ Typ (A:: AType , B:: BType ) where {AType,BType} =
1212 $ Typ {typeof(MemoryLayout(AType)),typeof(MemoryLayout(BType)),AType,BType} (A, B)
1313
14- BroadcastStyle (:: Type{<:$Typ} ) = ApplyBroadcastStyle ()
15- broadcastable (M:: $Typ ) = M
14+ @inline BroadcastStyle (:: Type{<:$Typ} ) = ApplyBroadcastStyle ()
15+ @inline broadcastable (M:: $Typ ) = M
1616
1717 similar (A:: $Typ , :: Type{T} , axes) where T = similar (Array{T}, axes)
1818 similar (A:: $Typ , :: Type{T} ) where T = similar (A, T, axes (A))
1919 similar (A:: $Typ ) = similar (A, eltype (A))
2020
21- copy (M:: $Typ ) = copyto! (similar (M), M)
22- materialize (M:: $Typ ) = copy (instantiate (M))
21+ @inline copy (M:: $Typ ) = copyto! (similar (M), M)
22+ @inline materialize (M:: $Typ ) = copy (instantiate (M))
2323 end
2424end
2525
26- size (L:: Ldiv{<:Any,<:Any,<:Any,<:AbstractMatrix} ) = (size (L. A, 2 ),size (L. B,2 ))
27- size (L:: Ldiv{<:Any,<:Any,<:Any,<:AbstractVector} ) = (size (L. A, 2 ),)
28- axes (L:: Ldiv{<:Any,<:Any,<:Any,<:AbstractMatrix} ) = (axes (L. A, 2 ),axes (L. B,2 ))
29- axes (L:: Ldiv{<:Any,<:Any,<:Any,<:AbstractVector} ) = (axes (L. A, 2 ),)
30- length (L:: Ldiv{<:Any,<:Any,<:Any,<:AbstractVector} ) = size (L. A, 2 )
26+ @inline _ldivaxes (:: Tuple{} , :: Tuple{} ) = ()
27+ @inline _ldivaxes (:: Tuple{} , Bax:: Tuple ) = Bax
28+ @inline _ldivaxes (:: Tuple{<:Any} , :: Tuple{<:Any} ) = ()
29+ @inline _ldivaxes (:: Tuple{<:Any} , Bax:: Tuple{<:Any,<:Any} ) = (OneTo (1 ),last (Bax))
30+ @inline _ldivaxes (Aax:: Tuple{<:Any,<:Any} , :: Tuple{<:Any} ) = (last (Aax),)
31+ @inline _ldivaxes (Aax:: Tuple{<:Any,<:Any} , Bax:: Tuple{<:Any,<:Any} ) = (last (Aax),last (Bax))
3132
32- size (L:: Rdiv ) = (size (L. A, 1 ),size (L. B,1 ))
33- axes (L:: Rdiv ) = (axes (L. A, 1 ),axes (L. B,1 ))
33+ @inline ldivaxes (A, B) = _ldivaxes (axes (A), axes (B))
3434
35- _ldivaxes (:: Tuple{} , :: Tuple{} ) = ()
36- _ldivaxes (:: Tuple{} , Bax:: Tuple ) = Bax
37- _ldivaxes (:: Tuple{<:Any} , :: Tuple{<:Any} ) = ()
38- _ldivaxes (:: Tuple{<:Any} , Bax:: Tuple{<:Any,<:Any} ) = (OneTo (1 ),last (Bax))
39- _ldivaxes (Aax:: Tuple{<:Any,<:Any} , :: Tuple{<:Any} ) = (last (Aax),)
40- _ldivaxes (Aax:: Tuple{<:Any,<:Any} , Bax:: Tuple{<:Any,<:Any} ) = (last (Aax),last (Bax))
35+ @inline axes (L:: Ldiv ) = ldivaxes (L. A, L. B)
36+ @inline size (L:: Ldiv ) = map (length, axes (L))
37+ @inline length (L:: Ldiv{<:Any,<:Any,<:Any,<:AbstractVector} ) = size (L. A, 2 )
4138
42- @inline ldivaxes (A, B) = _ldivaxes (axes (A), axes (B))
39+ @inline size (L:: Rdiv ) = (size (L. A, 1 ),size (L. B,1 ))
40+ @inline axes (L:: Rdiv ) = (axes (L. A, 1 ),axes (L. B,1 ))
4341
44- ndims (L:: Ldiv ) = ndims (last (L. args))
45- eltype (M:: Ldiv ) = promote_type (Base. promote_op (inv, eltype (M. A)), eltype (M. B))
46- eltype (M:: Rdiv ) = promote_type (eltype (M. A), Base. promote_op (inv, eltype (M. B)))
42+ @inline ndims (L:: Ldiv ) = ndims (L. B)
43+ @inline ndims (L:: Rdiv ) = 2
44+ @inline eltype (M:: Ldiv ) = promote_type (Base. promote_op (inv, eltype (M. A)), eltype (M. B))
45+ @inline eltype (M:: Rdiv ) = promote_type (eltype (M. A), Base. promote_op (inv, eltype (M. B)))
4746
4847
4948check_ldiv_axes (A, B) =
@@ -54,34 +53,35 @@ check_rdiv_axes(A, B) =
5453
5554
5655
57- function instantiate (L:: Ldiv )
56+ @inline function instantiate (L:: Ldiv )
5857 check_ldiv_axes (L. A, L. B)
5958 Ldiv (instantiate (L. A), instantiate (L. B))
6059end
6160
62- function instantiate (L:: Rdiv )
61+ @inline function instantiate (L:: Rdiv )
6362 check_rdiv_axes (L. A, L. B)
6463 Rdiv (instantiate (L. A), instantiate (L. B))
6564end
6665
67- _ldiv! (A, B) = ldiv! (factorize (A), B)
68- _ldiv! (A:: Factorization , B) = ldiv! (A, B)
69-
70- _ldiv! (dest, A, B) = ldiv! (dest, factorize (A), B)
71- _ldiv! (dest, A:: Factorization , B) = ldiv! (dest, A, B)
72- _ldiv! (dest, A:: Transpose{<:Any,<:Factorization} , B) = ldiv! (dest, A, B)
73- _ldiv! (dest, A:: Adjoint{<:Any,<:Factorization} , B) = ldiv! (dest, A, B)
66+ @inline _ldiv! (A, B) = ldiv! (factorize (A), B)
67+ @inline _ldiv! (A:: Factorization , B) = ldiv! (A, B)
7468
69+ @inline _ldiv! (dest, A, B) = ldiv! (dest, factorize (A), B)
70+ @inline _ldiv! (dest, A:: Factorization , B) = ldiv! (dest, A, B)
71+ @inline _ldiv! (dest, A:: Transpose{<:Any,<:Factorization} , B) = ldiv! (dest, A, B)
72+ @inline _ldiv! (dest, A:: Adjoint{<:Any,<:Factorization} , B) = ldiv! (dest, A, B)
7573
74+ @inline ldiv (A, B) = materialize (Ldiv (A,B))
75+ @inline rdiv (A, B) = materialize (Rdiv (A,B))
7676
77- materialize! (M:: Ldiv ) = _ldiv! (M. A, M. B)
78- materialize! (M:: Rdiv ) = materialize! (Lmul (M. B' , M. A' ))'
79- copyto! (dest:: AbstractArray , M:: Rdiv ) = copyto! (dest' , Ldiv (M. B' , M. A' ))'
77+ @inline materialize! (M:: Ldiv ) = _ldiv! (M. A, M. B)
78+ @inline materialize! (M:: Rdiv ) = materialize! (Lmul (M. B' , M. A' ))'
79+ @inline copyto! (dest:: AbstractArray , M:: Rdiv ) = copyto! (dest' , Ldiv (M. B' , M. A' ))'
8080
8181if VERSION ≥ v " 1.1-pre"
82- copyto! (dest:: AbstractArray , M:: Ldiv ) = _ldiv! (dest, M. A, M. B)
82+ @inline copyto! (dest:: AbstractArray , M:: Ldiv ) = _ldiv! (dest, M. A, M. B)
8383else
84- copyto! (dest:: AbstractArray , M:: Ldiv ) = _ldiv! (dest, M. A, copy (M. B))
84+ @inline copyto! (dest:: AbstractArray , M:: Ldiv ) = _ldiv! (dest, M. A, copy (M. B))
8585end
8686
8787const MatLdivVec{styleA, styleB, T, V} = Ldiv{styleA, styleB, <: AbstractMatrix{T} , <: AbstractVector{V} }
0 commit comments