Skip to content

Commit

Permalink
added ^ method for UniformScaling (JuliaLang#34008)
Browse files Browse the repository at this point in the history
Co-Authored-By: simeonschaub <[email protected]>

Co-Authored-By: Fredrik Ekre <[email protected]>
  • Loading branch information
2 people authored and dkarrasch committed Dec 11, 2019
1 parent 20595cc commit 1432c5a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ Standard library changes

* `cond(A, p)` with `p=1` or `p=Inf` now computes the exact condition number instead of an estimate ([#33547]).

* `UniformScaling` objects may now be exponentiated such that `(a*I)^x = a^x * I`.

#### Markdown

* Tables now have the `align` attribute set when `show`n as HTML ([#33849]).
Expand Down
10 changes: 9 additions & 1 deletion stdlib/LinearAlgebra/src/uniformscaling.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This file is a part of Julia. License is MIT: https://julialang.org/license

import Base: copy, adjoint, getindex, show, transpose, one, zero, inv,
hcat, vcat, hvcat
hcat, vcat, hvcat, ^

"""
UniformScaling{T<:Number}
Expand Down Expand Up @@ -227,6 +227,14 @@ Broadcast.broadcasted(::typeof(*), J::UniformScaling,x::Number) = UniformScaling

Broadcast.broadcasted(::typeof(/), J::UniformScaling,x::Number) = UniformScaling(J.λ/x)

(^)(J::UniformScaling, x::Number) = UniformScaling((J.λ)^x)
Base.literal_pow(::typeof(^), J::UniformScaling, x::Val) = UniformScaling(Base.literal_pow(^, J.λ, x))

Broadcast.broadcasted(::typeof(^), J::UniformScaling, x::Number) = UniformScaling(J.λ^x)
function Broadcast.broadcasted(::typeof(Base.literal_pow), ::typeof(^), J::UniformScaling, x::Val)
UniformScaling(Base.literal_pow(^, J.λ, x))
end

==(J1::UniformScaling,J2::UniformScaling) = (J1.λ == J2.λ)

## equality comparison with UniformScaling
Expand Down
9 changes: 9 additions & 0 deletions stdlib/LinearAlgebra/test/uniformscaling.jl
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,15 @@ end
@test UniformScaling(α)./α == UniformScaling(1.0)
@test α * UniformScaling(1.0) == UniformScaling(1.0) * α
@test UniformScaling(α)/α == UniformScaling(1.0)

β = rand()
@test*I)^2 == UniformScaling^2)
@test*I)^(-2) == UniformScaling^(-2))
@test*I)^(.5) == UniformScaling^(.5))
@test*I)^β == UniformScaling^β)

@test* I) .^ 2 == UniformScaling^2)
@test* I) .^ β == UniformScaling^β)
end

@testset "det and logdet" begin
Expand Down

0 comments on commit 1432c5a

Please sign in to comment.