@@ -390,6 +390,11 @@ function Base.map!(
390390)
391391 return map! (Base. Fix2 (* , inv (f. x)), dest, a)
392392end
393+ function Base. map! (:: typeof (conj), dest:: KroneckerArray , a:: KroneckerArray )
394+ dest. a .= conj .(a. a)
395+ dest. b .= conj .(a. b)
396+ return dest
397+ end
393398
394399using LinearAlgebra:
395400 LinearAlgebra,
@@ -409,7 +414,6 @@ using LinearAlgebra:
409414 tr
410415
411416using DiagonalArrays: DiagonalArrays, diagonal
412- DiagonalArrays. diagonal (a:: AbstractArray ) = Diagonal (a)
413417function DiagonalArrays. diagonal (a:: KroneckerArray )
414418 return diagonal (a. a) ⊗ diagonal (a. b)
415419end
@@ -438,6 +442,23 @@ function LinearAlgebra.norm(a::KroneckerArray, p::Int=2)
438442 return norm (a. a, p) ⊗ norm (a. b, p)
439443end
440444
445+ function Base. real (a:: KroneckerArray )
446+ if iszero (imag (a. a)) || iszero (imag (a. b))
447+ return real (a. a) ⊗ real (a. b)
448+ elseif iszero (real (a. a)) || iszero (real (a. b))
449+ return - imag (a. a) ⊗ imag (a. b)
450+ end
451+ return real (a. a) ⊗ real (a. b) - imag (a. a) ⊗ imag (a. b)
452+ end
453+ function Base. imag (a:: KroneckerArray )
454+ if iszero (imag (a. a)) || iszero (real (a. b))
455+ return real (a. a) ⊗ imag (a. b)
456+ elseif iszero (real (a. a)) || iszero (imag (a. b))
457+ return imag (a. a) ⊗ real (a. b)
458+ end
459+ return real (a. a) ⊗ imag (a. b) + imag (a. a) ⊗ real (a. b)
460+ end
461+
441462using MatrixAlgebraKit: MatrixAlgebraKit, diagview
442463function MatrixAlgebraKit. diagview (a:: KroneckerMatrix )
443464 return diagview (a. a) ⊗ diagview (a. b)
0 commit comments