Skip to content

Commit dc51cea

Browse files
Rename Complex.power as Complex.pow (#24)
* Rename Complex.power as Complex.pow See elixir-nx/nx#982. * Deprecate Complex.power
1 parent ed62d21 commit dc51cea

File tree

3 files changed

+51
-48
lines changed

3 files changed

+51
-48
lines changed

lib/complex.ex

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -986,42 +986,42 @@ defmodule Complex do
986986
987987
### Examples
988988
989-
iex> Complex.power(Complex.from_polar(2,:math.pi), Complex.new(0, 1))
989+
iex> Complex.pow(Complex.from_polar(2,:math.pi), Complex.new(0, 1))
990990
%Complex{im: 0.027612020368333014, re: 0.03324182700885666}
991991
992992
"""
993-
@spec power(t | non_finite_number | number, t | non_finite_number | number) ::
993+
@spec pow(t | non_finite_number | number, t | non_finite_number | number) ::
994994
t | non_finite_number | number
995995

996-
def power(:nan, _), do: :nan
997-
def power(_, :nan), do: :nan
996+
def pow(:nan, _), do: :nan
997+
def pow(_, :nan), do: :nan
998998

999-
def power(:infinity, y) when is_number(y) and y > 0, do: :infinity
1000-
def power(:infinity, y) when y == 0, do: 1
1001-
def power(:infinity, y) when is_number(y) and y < 0, do: 0
999+
def pow(:infinity, y) when is_number(y) and y > 0, do: :infinity
1000+
def pow(:infinity, y) when y == 0, do: 1
1001+
def pow(:infinity, y) when is_number(y) and y < 0, do: 0
10021002

1003-
def power(:neg_infinity, y) when is_number(y) and y > 0 do
1003+
def pow(:neg_infinity, y) when is_number(y) and y > 0 do
10041004
if rem(y, 2) == 0 do
10051005
:infinity
10061006
else
10071007
:neg_infinity
10081008
end
10091009
end
10101010

1011-
def power(:neg_infinity, y) when y == 0, do: 1
1012-
def power(:neg_infinity, y) when is_number(y) and y < 0, do: 0
1011+
def pow(:neg_infinity, y) when y == 0, do: 1
1012+
def pow(:neg_infinity, y) when is_number(y) and y < 0, do: 0
10131013

1014-
def power(x, :infinity) when x == 0, do: 0
1015-
def power(%Complex{re: re, im: im}, :infinity) when re == 0 and im == 0, do: 0
1016-
def power(x, :neg_infinity) when x == 0, do: :infinity
1017-
def power(%Complex{re: re, im: im}, :neg_infinity) when re == 0 and im == 0, do: :infinity
1018-
def power(_, :neg_infinity), do: 0
1019-
def power(_, :infinity), do: :infinity
1014+
def pow(x, :infinity) when x == 0, do: 0
1015+
def pow(%Complex{re: re, im: im}, :infinity) when re == 0 and im == 0, do: 0
1016+
def pow(x, :neg_infinity) when x == 0, do: :infinity
1017+
def pow(%Complex{re: re, im: im}, :neg_infinity) when re == 0 and im == 0, do: :infinity
1018+
def pow(_, :neg_infinity), do: 0
1019+
def pow(_, :infinity), do: :infinity
10201020

1021-
def power(x, y) when is_integer(x) and is_integer(y) and y >= 0, do: Integer.pow(x, y)
1022-
def power(x, y) when is_number(x) and is_number(y), do: :math.pow(x, y)
1021+
def pow(x, y) when is_integer(x) and is_integer(y) and y >= 0, do: Integer.pow(x, y)
1022+
def pow(x, y) when is_number(x) and is_number(y), do: :math.pow(x, y)
10231023

1024-
def power(x, y) do
1024+
def pow(x, y) do
10251025
x = as_complex(x)
10261026
y = as_complex(y)
10271027

@@ -1042,12 +1042,15 @@ defmodule Complex do
10421042
true ->
10431043
rho = abs(x)
10441044
theta = phase(x)
1045-
s = multiply(power(rho, y.re), exp(multiply(negate(y.im), theta)))
1045+
s = multiply(pow(rho, y.re), exp(multiply(negate(y.im), theta)))
10461046
r = add(multiply(y.re, theta), multiply(y.im, ln(rho)))
10471047
new(multiply(s, cos(r)), multiply(s, sin(r)))
10481048
end
10491049
end
10501050

1051+
@deprecated "Use pow/2 instead"
1052+
def power(x, y), do: pow(x, y)
1053+
10511054
@doc """
10521055
Returns a new complex that is the sine of the provided parameter.
10531056

lib/complex/kernel.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ defmodule Complex.Kernel do
2626
def a * b, do: Complex.multiply(a, b)
2727
def a / b, do: Complex.divide(a, b)
2828

29-
def unquote(@pow_atom)(a, b), do: Complex.power(a, b)
29+
def unquote(@pow_atom)(a, b), do: Complex.pow(a, b)
3030
end

test/complex_test.exs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ defmodule ComplexTest do
373373
assert_close Complex.ln(a), %Complex{re: 0.8047189562170503, im: 1.1071487177940904}
374374
assert_close Complex.log10(a), %Complex{re: 0.3494850021680094, im: 0.480828578784234}
375375
assert_close Complex.log2(a), %Complex{re: 1.1609640474436813, im: 1.5972779646881088}
376-
assert_close Complex.power(a, b), %Complex{re: 0.129009594074467, im: 0.03392409290517014}
376+
assert_close Complex.pow(a, b), %Complex{re: 0.129009594074467, im: 0.03392409290517014}
377377
end
378378

379379
test "Exp and logs (no upcasts)" do
@@ -383,7 +383,7 @@ defmodule ComplexTest do
383383
assert_close Complex.ln(a), :math.log(a)
384384
assert_close Complex.log10(a), :math.log10(a)
385385
assert_close Complex.log2(a), :math.log2(a)
386-
assert_close Complex.power(a, b), :math.pow(a, b)
386+
assert_close Complex.pow(a, b), :math.pow(a, b)
387387

388388
assert Complex.ln(0) == :neg_infinity
389389
assert Complex.log10(0) == :neg_infinity
@@ -402,31 +402,31 @@ defmodule ComplexTest do
402402
assert Complex.log2(:nan) == :nan
403403
end
404404

405-
test "power (non-finite)" do
406-
assert Complex.power(:nan, :rand.uniform()) == :nan
407-
assert Complex.power(:rand.uniform(), :nan) == :nan
408-
409-
assert Complex.power(:infinity, 2) == :infinity
410-
assert Complex.power(:infinity, 0) == 1
411-
assert Complex.power(:infinity, 0.0) == 1
412-
assert Complex.power(:infinity, -2) == 0
413-
414-
assert Complex.power(:neg_infinity, 2) == :infinity
415-
assert Complex.power(:neg_infinity, 3) == :neg_infinity
416-
assert Complex.power(:neg_infinity, 0) == 1
417-
assert Complex.power(:neg_infinity, 0.0) == 1
418-
assert Complex.power(:neg_infinity, -2) == 0
419-
420-
assert Complex.power(10, :infinity) == :infinity
421-
assert Complex.power(:infinity, :infinity) == :infinity
422-
assert Complex.power(:neg_infinity, :infinity) == :infinity
423-
assert Complex.power(10, :neg_infinity) == 0
424-
assert Complex.power(:infinity, :neg_infinity) == 0
425-
assert Complex.power(:neg_infinity, :neg_infinity) == 0
426-
assert Complex.power(0, :neg_infinity) == :infinity
427-
assert Complex.power(0, :infinity) == 0
428-
assert Complex.power(Complex.new(0, 0), :neg_infinity) == :infinity
429-
assert Complex.power(Complex.new(0, 0), :infinity) == 0
405+
test "pow (non-finite)" do
406+
assert Complex.pow(:nan, :rand.uniform()) == :nan
407+
assert Complex.pow(:rand.uniform(), :nan) == :nan
408+
409+
assert Complex.pow(:infinity, 2) == :infinity
410+
assert Complex.pow(:infinity, 0) == 1
411+
assert Complex.pow(:infinity, 0.0) == 1
412+
assert Complex.pow(:infinity, -2) == 0
413+
414+
assert Complex.pow(:neg_infinity, 2) == :infinity
415+
assert Complex.pow(:neg_infinity, 3) == :neg_infinity
416+
assert Complex.pow(:neg_infinity, 0) == 1
417+
assert Complex.pow(:neg_infinity, 0.0) == 1
418+
assert Complex.pow(:neg_infinity, -2) == 0
419+
420+
assert Complex.pow(10, :infinity) == :infinity
421+
assert Complex.pow(:infinity, :infinity) == :infinity
422+
assert Complex.pow(:neg_infinity, :infinity) == :infinity
423+
assert Complex.pow(10, :neg_infinity) == 0
424+
assert Complex.pow(:infinity, :neg_infinity) == 0
425+
assert Complex.pow(:neg_infinity, :neg_infinity) == 0
426+
assert Complex.pow(0, :neg_infinity) == :infinity
427+
assert Complex.pow(0, :infinity) == 0
428+
assert Complex.pow(Complex.new(0, 0), :neg_infinity) == :infinity
429+
assert Complex.pow(Complex.new(0, 0), :infinity) == 0
430430
end
431431

432432
test "ln, log10, log2 (non-finite)" do

0 commit comments

Comments
 (0)