@@ -5,45 +5,44 @@ for Typ in (:Ldiv, :Rdiv)
5
5
B:: BType
6
6
end
7
7
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} =
9
9
$ Typ {StyleA,StyleB,AType,BType} (A,B)
10
10
11
- $ Typ (A:: AType , B:: BType ) where {AType,BType} =
11
+ @inline $ Typ (A:: AType , B:: BType ) where {AType,BType} =
12
12
$ Typ {typeof(MemoryLayout(AType)),typeof(MemoryLayout(BType)),AType,BType} (A, B)
13
13
14
- BroadcastStyle (:: Type{<:$Typ} ) = ApplyBroadcastStyle ()
15
- broadcastable (M:: $Typ ) = M
14
+ @inline BroadcastStyle (:: Type{<:$Typ} ) = ApplyBroadcastStyle ()
15
+ @inline broadcastable (M:: $Typ ) = M
16
16
17
17
similar (A:: $Typ , :: Type{T} , axes) where T = similar (Array{T}, axes)
18
18
similar (A:: $Typ , :: Type{T} ) where T = similar (A, T, axes (A))
19
19
similar (A:: $Typ ) = similar (A, eltype (A))
20
20
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))
23
23
end
24
24
end
25
25
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))
31
32
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))
34
34
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 )
41
38
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 ))
43
41
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)))
47
46
48
47
49
48
check_ldiv_axes (A, B) =
@@ -54,34 +53,35 @@ check_rdiv_axes(A, B) =
54
53
55
54
56
55
57
- function instantiate (L:: Ldiv )
56
+ @inline function instantiate (L:: Ldiv )
58
57
check_ldiv_axes (L. A, L. B)
59
58
Ldiv (instantiate (L. A), instantiate (L. B))
60
59
end
61
60
62
- function instantiate (L:: Rdiv )
61
+ @inline function instantiate (L:: Rdiv )
63
62
check_rdiv_axes (L. A, L. B)
64
63
Rdiv (instantiate (L. A), instantiate (L. B))
65
64
end
66
65
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)
74
68
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)
75
73
74
+ @inline ldiv (A, B) = materialize (Ldiv (A,B))
75
+ @inline rdiv (A, B) = materialize (Rdiv (A,B))
76
76
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' ))'
80
80
81
81
if 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)
83
83
else
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))
85
85
end
86
86
87
87
const MatLdivVec{styleA, styleB, T, V} = Ldiv{styleA, styleB, <: AbstractMatrix{T} , <: AbstractVector{V} }
0 commit comments