Probably good to think first what the inverse function, np.frexp, should
do for complex numbers.  I guess the choices are:
1. Remove the largest exponent of real/imaginary, and give a complex
   mantissa, in which only one of the real or imaginary components is
   guaranteed to have its absolute value be in the interval [0.5, 1)
   (but for both the claim in the np.frexp docstring that they are in
   the interval (-1, 1) would continue to hold).
2. Do real, imaginary separately.
3. Insists on 0.5 < |z| < 1.

The first option seems the most sensible, in which case the suggested
extension for ldexp makes sense.

-- Marten

"Carlos Martin" <cgmar...@andrew.cmu.edu> writes:

> Currently, 
> [ldexp](https://numpy.org/doc/stable/reference/generated/numpy.ldexp.html) 
> throws a TypeError on a complex input:
>
> ```python3
> import numpy as np
>
> def naive_ldexp(x, n):
>     return x * 2**n
>
> def new_ldexp(x, n):
>     if np.iscomplex(x):
>         y = np.empty_like(x)
>         y.real = np.ldexp(x.real, n)
>         y.imag = np.ldexp(x.imag, n)
>         return y
>     else:
>         return np.ldexp(x, n)
>
> def main():
>     x = 2.2 + 3.3j
>     n = 3
>
>     print(naive_ldexp(x, n))
>     print(new_ldexp(x, n))
>     print(np.ldexp(x, n))
>
> if __name__ == "__main__":
>     main()
> ```
>
> ```
> (17.6+26.4j)
> (17.6+26.4j)
> Traceback (most recent call last):
>   File "test.py", line 34, in <module>
>     main()
>   File "test.py", line 30, in main
>     print(np.ldexp(x, n))
>           ^^^^^^^^^^^^^^
> TypeError: ufunc 'ldexp' not supported for the input types, and the inputs 
> could not be safely coerced to any supported types according to the casting 
> rule ''safe''
> ```
>
> This can easily be solved by applying ldexp to the real and imaginary parts 
> of the input, as shown in the function new_ldexp above.
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: m...@astro.utoronto.ca
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to