File: //opt/cloudlinux/venv/lib64/python3.11/site-packages/numpy/lib/__pycache__/scimath.cpython-311.pyc
�
    � h�:  �                   �  � d Z ddlmc mZ ddlmc mZ ddlmZm	Z	 ddl
mZ ddlm
Z
 g d�Z ej        d�  �        Zd� Zd	� Zd
� Zd� Zd� Z ee�  �        d
� �   �         Z ee�  �        d� �   �         Z ee�  �        d� �   �         Zd� Z ee�  �        d� �   �         Z ee�  �        d� �   �         Zd� Z ee�  �        d� �   �         Z ee�  �        d� �   �         Z ee�  �        d� �   �         Z ee�  �        d� �   �         ZdS )a�  
Wrapper functions to more user-friendly calling of certain math functions
whose output data-type is different than the input data-type in certain
domains of the input.
For example, for functions like `log` with branch cuts, the versions in this
module provide the mathematically valid answers in the complex plane::
  >>> import math
  >>> np.emath.log(-math.exp(1)) == (1+1j*math.pi)
  True
Similarly, `sqrt`, other base logarithms, `power` and trig functions are
correctly handled.  See their respective docstrings for specific examples.
Functions
---------
.. autosummary::
   :toctree: generated/
   sqrt
   log
   log2
   logn
   log10
   power
   arccos
   arcsin
   arctanh
�    N)�asarray�any)�array_function_dispatch)�isreal)	�sqrt�log�log2�logn�log10�power�arccos�arcsin�arctanhg       @c           	      �6  � t          | j        j        t          j        t          j        t          j        t          j        t          j        t          j	        f�  �        r| �
                    t          j	        �  �        S | �
                    t          j        �  �        S )a_  Convert its input `arr` to a complex array.
    The input is returned as a complex array of the smallest type that will fit
    the original data: types like single, byte, short, etc. become csingle,
    while others become cdouble.
    A copy of the input is always made.
    Parameters
    ----------
    arr : array
    Returns
    -------
    array
        An array with the same input data as the input but in complex form.
    Examples
    --------
    First, consider an input of type short:
    >>> a = np.array([1,2,3],np.short)
    >>> ac = np.lib.scimath._tocomplex(a); ac
    array([1.+0.j, 2.+0.j, 3.+0.j], dtype=complex64)
    >>> ac.dtype
    dtype('complex64')
    If the input is of type double, the output is correspondingly of the
    complex double type as well:
    >>> b = np.array([1,2,3],np.double)
    >>> bc = np.lib.scimath._tocomplex(b); bc
    array([1.+0.j, 2.+0.j, 3.+0.j])
    >>> bc.dtype
    dtype('complex128')
    Note that even if the input was complex to begin with, a copy is still
    made, since the astype() method always copies:
    >>> c = np.array([1,2,3],np.csingle)
    >>> cc = np.lib.scimath._tocomplex(c); cc
    array([1.+0.j,  2.+0.j,  3.+0.j], dtype=complex64)
    >>> c *= 2; c
    array([2.+0.j,  4.+0.j,  6.+0.j], dtype=complex64)
    >>> cc
    array([1.+0.j,  2.+0.j,  3.+0.j], dtype=complex64)
    )�
issubclass�dtype�type�nt�single�byte�short�ubyte�ushort�csingle�astype�cdouble)�arrs    �F/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/lib/scimath.py�
_tocomplexr   1   sc   � �p �#�)�.�2�9�b�g�r�x���#%�9�b�j�#:� ;� ;� &��z�z�"�*�%�%�%��z�z�"�*�%�%�%�    c                 �   � t          | �  �        } t          t          | �  �        | dk     z  �  �        rt          | �  �        } | S )a�  Convert `x` to complex if it has real, negative components.
    Otherwise, output is just the array version of the input (via asarray).
    Parameters
    ----------
    x : array_like
    Returns
    -------
    array
    Examples
    --------
    >>> np.lib.scimath._fix_real_lt_zero([1,2])
    array([1, 2])
    >>> np.lib.scimath._fix_real_lt_zero([-1,2])
    array([-1.+0.j,  2.+0.j])
    r   )r   r   r   r   ��xs    r   �_fix_real_lt_zeror$   p   s>