@@ -4,6 +4,7 @@ using TensorAlgebra:
44 blockedperm,
55 contract,
66 contract!,
7+ contractadd!,
78 eigen,
89 eigvals,
910 factorize,
@@ -25,14 +26,14 @@ using TensorAlgebra:
2526using TensorAlgebra. BaseExtensions: BaseExtensions
2627using TupleTools: TupleTools
2728
28- function TensorAlgebra. contract ! (
29+ function TensorAlgebra. contractadd ! (
2930 a_dest:: AbstractNamedDimsArray ,
3031 a1:: AbstractNamedDimsArray ,
3132 a2:: AbstractNamedDimsArray ,
32- α:: Number = true ,
33- β:: Number = false ,
33+ α:: Number ,
34+ β:: Number ,
3435)
35- contract ! (
36+ contractadd ! (
3637 dename (a_dest),
3738 nameddimsindices (a_dest),
3839 dename (a1),
@@ -45,6 +46,12 @@ function TensorAlgebra.contract!(
4546 return a_dest
4647end
4748
49+ function TensorAlgebra. contract! (
50+ a_dest:: AbstractNamedDimsArray , a1:: AbstractNamedDimsArray , a2:: AbstractNamedDimsArray
51+ )
52+ return contractadd! (a_dest, a1, a2, true , false )
53+ end
54+
4855function TensorAlgebra. contract (a1:: AbstractNamedDimsArray , a2:: AbstractNamedDimsArray )
4956 a_dest, nameddimsindices_dest = contract (
5057 dename (a1), nameddimsindices (a1), dename (a2), nameddimsindices (a2)
@@ -79,10 +86,17 @@ function LinearAlgebra.mul!(
7986 a_dest:: AbstractNamedDimsArray ,
8087 a1:: AbstractNamedDimsArray ,
8188 a2:: AbstractNamedDimsArray ,
82- α:: Number = true ,
83- β:: Number = false ,
89+ α:: Number ,
90+ β:: Number ,
8491)
85- contract! (a_dest, a1, a2, α, β)
92+ contractadd! (a_dest, a1, a2, α, β)
93+ return a_dest
94+ end
95+
96+ function LinearAlgebra. mul! (
97+ a_dest:: AbstractNamedDimsArray , a1:: AbstractNamedDimsArray , a2:: AbstractNamedDimsArray
98+ )
99+ contract! (a_dest, a1, a2)
86100 return a_dest
87101end
88102
@@ -301,3 +315,50 @@ function TensorAlgebra.right_null(a::AbstractNamedDimsArray, dimnames_codomain;
301315 domain = setdiff (nameddimsindices (a), codomain)
302316 return right_null (a, codomain, domain; kwargs... )
303317end
318+
319+ const MATRIX_FUNCTIONS = [
320+ :exp ,
321+ :cis ,
322+ :log ,
323+ :sqrt ,
324+ :cbrt ,
325+ :cos ,
326+ :sin ,
327+ :tan ,
328+ :csc ,
329+ :sec ,
330+ :cot ,
331+ :cosh ,
332+ :sinh ,
333+ :tanh ,
334+ :csch ,
335+ :sech ,
336+ :coth ,
337+ :acos ,
338+ :asin ,
339+ :atan ,
340+ :acsc ,
341+ :asec ,
342+ :acot ,
343+ :acosh ,
344+ :asinh ,
345+ :atanh ,
346+ :acsch ,
347+ :asech ,
348+ :acoth ,
349+ ]
350+
351+ for f in MATRIX_FUNCTIONS
352+ @eval begin
353+ function Base. $f (
354+ a:: AbstractNamedDimsArray , dimnames_codomain, dimnames_domain; kwargs...
355+ )
356+ codomain = to_nameddimsindices (a, dimnames_codomain)
357+ domain = to_nameddimsindices (a, dimnames_domain)
358+ fa_unnamed = TensorAlgebra.$ f (
359+ dename (a), nameddimsindices (a), codomain, domain; kwargs...
360+ )
361+ return nameddimsarray (fa_unnamed, (codomain... , domain... ))
362+ end
363+ end
364+ end
0 commit comments