관리-도구
편집 파일: scimath.cpython-37.pyc
B ��Fd7 � @ s� d Z ddlmZmZmZ ddlm mZ ddl m m Z ddlmZm Z ddlmZ dddd d ddd dg Ze�d�Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd � Zdd � Zdd� Zdd� Zdd� Zdd � Zd d� ZdS )!aD 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 >>> from numpy.lib import scimath >>> scimath.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. � )�division�absolute_import�print_functionN)�asarray�any)�isreal�sqrt�log�log2�logn�log10�power�arccos�arcsin�arctanhg @c C sB t | jjtjtjtjtjtjtj f�r2| � tj �S | � tj�S dS )ah 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) N)� issubclassZdtype�type�ntZsingle�byte�short�ubyte�ushortZcsingle�astype�cdouble)Zarr� r �D/opt/alt/python37/lib64/python3.7/site-packages/numpy/lib/scimath.py� _tocomplex# s 8r c C s( t | �} tt| �| dk @ �r$t| �} | 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 )�xr r r �_fix_real_lt_zeroa s r c C s( t | �} tt| �| dk @ �r$| d } | S )a� Convert `x` to double 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_int_lt_zero([1,2]) array([1, 2]) >>> np.lib.scimath._fix_int_lt_zero([-1,2]) array([-1., 2.]) r g �?)r r r )r r r r �_fix_int_lt_zero| s r c C s, t | �} tt| �t| �dk@ �r(t| �} | S )a� Convert `x` to complex if it has real components x_i with abs(x_i)>1. Otherwise, output is just the array version of the input (via asarray). Parameters ---------- x : array_like Returns ------- array Examples -------- >>> np.lib.scimath._fix_real_abs_gt_1([0,1]) array([0, 1]) >>> np.lib.scimath._fix_real_abs_gt_1([0,2]) array([ 0.+0.j, 2.+0.j]) � )r r r �absr )r r r r �_fix_real_abs_gt_1� s r"