@@ -734,6 +734,17 @@ function Base.:*(L::FunctionOperator{iip, true}, v::AbstractArray) where {iip}
734734 vec_output ? vec (W) : W
735735end
736736
737+ function Base.:* (L:: FunctionOperator{iip, false} , v:: AbstractArray ) where {iip}
738+ _sizecheck (L, v, nothing )
739+ V, _, vec_output = _unvec (L, v, nothing )
740+
741+ W, _ = L. cache
742+ W = copy (W)
743+ L. op (W, V, L. u, L. p, L. t; L. traits. kwargs... )
744+
745+ vec_output ? vec (W) : W
746+ end
747+
737748function Base.:\ (L:: FunctionOperator{iip, true} , v:: AbstractArray ) where {iip}
738749 _sizecheck (L, nothing , v)
739750 _, V, vec_output = _unvec (L, nothing , v)
@@ -743,16 +754,30 @@ function Base.:\(L::FunctionOperator{iip, true}, v::AbstractArray) where {iip}
743754 vec_output ? vec (W) : W
744755end
745756
757+ function Base.:\ (L:: FunctionOperator{iip, false} , v:: AbstractArray ) where {iip}
758+ _sizecheck (L, nothing , v)
759+ _, V, vec_output = _unvec (L, nothing , v)
760+
761+ W, _ = L. cache
762+ W = copy (W)
763+ L. op_inverse (W, V, L. u, L. p, L. t; L. traits. kwargs... )
764+
765+ vec_output ? vec (W) : W
766+ end
767+
746768function LinearAlgebra. mul! (w:: AbstractArray , L:: FunctionOperator{true} , v:: AbstractArray )
747769 _sizecheck (L, v, w)
748770 V, W, vec_output = _unvec (L, v, w)
749771 L. op (W, V, L. u, L. p, L. t; L. traits. kwargs... )
750772 vec_output ? vec (W) : W
751773end
752774
753- function LinearAlgebra. mul! (:: AbstractArray , L:: FunctionOperator{false} , :: AbstractArray ,
775+ function LinearAlgebra. mul! (w :: AbstractArray , L:: FunctionOperator{false} , :: AbstractArray ,
754776 args... )
755- @error " LinearAlgebra.mul! not defined for out-of-place operator $L "
777+ _sizecheck (L, v, w)
778+ V, W, vec_output = _unvec (L, v, w)
779+ W .= L. op (V, L. u, L. p, L. t; L. traits. kwargs... )
780+ vec_output ? vec (W) : W
756781end
757782
758783function LinearAlgebra. mul! (w:: AbstractArray , L:: FunctionOperator{true, oop, false} ,
@@ -797,15 +822,26 @@ function LinearAlgebra.ldiv!(L::FunctionOperator{true}, v::AbstractArray)
797822 copy! (W, V)
798823 L. op_inverse (W, V, L. u, L. p, L. t; L. traits. kwargs... ) # ldiv!(U, L, V)
799824
800- vec_output ? vec (W) : W
825+ V .= W
826+ vec_output ? vec (V) : V
801827end
802828
803- function LinearAlgebra. ldiv! (v:: AbstractArray , L:: FunctionOperator{false} , u:: AbstractArray )
804- @error " LinearAlgebra.ldiv! not defined for out-of-place $L "
829+ function LinearAlgebra. ldiv! (w:: AbstractArray , L:: FunctionOperator{false} , v:: AbstractArray )
830+ _sizecheck (L, v, w)
831+ W, V, _ = _unvec (L, w, v)
832+
833+ W .= L. op_inverse (V, L. u, L. p, L. t; L. traits. kwargs... )
834+
835+ w
805836end
806837
807- function LinearAlgebra. ldiv! (L:: FunctionOperator{false} , u:: AbstractArray )
808- @error " LinearAlgebra.ldiv! not defined for out-of-place $L "
838+ function LinearAlgebra. ldiv! (L:: FunctionOperator{false} , v:: AbstractArray )
839+ _sizecheck (L, nothing , v)
840+ V, _, vec_output = _unvec (L, v, nothing )
841+
842+ V .= L. op_inverse (V, L. u, L. p, L. t; L. traits. kwargs... ) # ldiv!(W, L, V)
843+
844+ vec_output ? vec (V) : V
809845end
810846
811847# Out-of-place: v is action vector, u is update vector
0 commit comments