o 6a>M @sjdZddgZddlZddlmZddlmZddlmZdd lm Z dd lm Z m Z dd l mZmZdd lm Z d dZddZGdddZe je je je je je jiZdZe jee jdedde jee jdedde j ee j!dedde j"ee j#deddiZ$iZ%ddZ&iZ'dd Z(d!d"Z)d#d$Z*ed%Gd&ddZ+ed%Gd'ddZ,dS)(zJMachine limits for Float32 and Float64 and (long double) if available... finfoiinfoN)MachAr) set_module)numeric) numerictypes)arrayinf)log10exp2)umathcC|jdkr |}d|_|S)zfix rank-0 --> rank-1r)r)ndimcopyshapear6/usr/lib/python3/dist-packages/numpy/core/getlimits.py_fr0 rcCr)zfix rank > 0 --> rank-0rr)sizerrrrrr_fr1rrc@seZdZdZddZdS) MachArLikez$ Object to simulate MachAr instance c  stfddfdd}fdd} d|_|||_|_|||_|||_|_|||_|_d||_ |j |t t |j |_|d|j |_| |j|_| |j|_| |j|_| |j|_| |j|_dS)Nc t|gSNr vftyperr' z%MachArLike.__init__..cs t|Sr)rr) float_convrrr"(r#cdtt|dSNfmtrr rrr!paramsrrr")titleitype )_MACHAR_PARAMSr,epsilonepsepsnegxmaxhugexmintinyibeta__dict__updateintr precision resolution_str_eps _str_epsneg _str_xmin _str_xmax_str_resolution) selfr!r1r2r4r6r7kwargsfloat_to_float float_to_strr)r$r!r*r__init__#s$         zMachArLike.__init__N)__name__ __module__ __qualname____doc__rFrrrrr s rz(numpy {} precision floating point numberz%24.16edouble)r-r'r,z%15.7esinglez%sz long doublez%12.5ehalfcCs |t|<dSr) _KNOWN_TYPES)macharbytepatrrr_register_typeZs rQcCstj}t|dddddddddt|dt|d|d |d d }t|d |td<tj}t|d ddddddddt|d t|d|dddt|dd }t|d|td<tj}d}d}t|dddddddddd|d|||d |d }t|d!|td"<tj}t|d#} t|d$} t j d%d&|d'| | |d } Wdn1swYt|d(d#d$d)d*d+dddt|d(| | | d } t| d,t| d,| td<t|d-} t|d$}t j d%d&|d'| ||d }Wdn 1swYt|d.d-d$d)d/d+dddt|d.| ||d }t|d0|td1<t t d2r7t |t|dn|j}t|d3d4ddd5ddddt|d3t|d4|t|dd }t|d6t|d7|td8<dS)9Niiir.rig?) machepnegepminexpmaxexpitiexpr7irndngrdr1r2r4r6sfiiig?s̽ gttfddfddfddfdddS)zB Create MachAr instance with found information on float types crrrrr rrr" r#z$_discovered_machar..cst|ddS)Nr-r)rastyper)r*rrr"!scstt|dS)Nrr(rr rrr""scr%r&r(rr)rrr"#r+r,)r/rr rr)rrs    rnumpyc@s4eZdZdZiZddZddZddZdd Zd S) ra finfo(dtype) Machine limits for floating point types. Attributes ---------- bits : int The number of bits occupied by the type. eps : float The difference between 1.0 and the next smallest representable float larger than 1.0. For example, for 64-bit binary floats in the IEEE-754 standard, ``eps = 2**-52``, approximately 2.22e-16. epsneg : float The difference between 1.0 and the next smallest representable float less than 1.0. For example, for 64-bit binary floats in the IEEE-754 standard, ``epsneg = 2**-53``, approximately 1.11e-16. iexp : int The number of bits in the exponent portion of the floating point representation. machar : MachAr The object which calculated these parameters and holds more detailed information. machep : int The exponent that yields `eps`. max : floating point number of the appropriate type The largest representable number. maxexp : int The smallest positive power of the base (2) that causes overflow. min : floating point number of the appropriate type The smallest representable number, typically ``-max``. minexp : int The most negative power of the base (2) consistent with there being no leading 0's in the mantissa. negep : int The exponent that yields `epsneg`. nexp : int The number of bits in the exponent including its sign and bias. nmant : int The number of bits in the mantissa. precision : int The approximate number of decimal digits to which this kind of float is precise. resolution : floating point number of the appropriate type The approximate decimal resolution of this type, i.e., ``10**-precision``. tiny : float The smallest positive floating point number with full precision (see Notes). Parameters ---------- dtype : float, dtype, or instance Kind of floating point data-type about which to get information. See Also -------- MachAr : The implementation of the tests that produce this information. iinfo : The equivalent for integer data types. spacing : The distance between a value and the nearest adjacent number nextafter : The next floating point value after x1 towards x2 Notes ----- For developers of NumPy: do not instantiate this at the module level. The initial calculation of these parameters is expensive and negatively impacts import times. These objects are cached, so calling ``finfo()`` repeatedly inside your functions is not a problem. Note that ``tiny`` is not actually the smallest positive representable value in a NumPy floating point type. As in the IEEE-754 standard [1]_, NumPy floating point types make use of subnormal numbers to fill the gap between 0 and ``tiny``. However, subnormal numbers may have significantly reduced precision [2]_. References ---------- .. [1] IEEE Standard for Floating-Point Arithmetic, IEEE Std 754-2008, pp.1-70, 2008, http://www.doi.org/10.1109/IEEESTD.2008.4610935 .. [2] Wikipedia, "Denormal Numbers", https://en.wikipedia.org/wiki/Denormal_number cCszt|}Wntytt|}Ynw|j|d}|dur%|S|g}t|}||ur8|||}t|tj sDt d||j|d}|durQ|St|tj sft |}||urf|||}|j|d}|durs|St ||}|D]}||j|<q}|S)Nzdata type %r not inexact)rdtype TypeErrortype _finfo_cacher obj2sctypeappend issubclassinexactrfloating_convert_to_floatobject__new___init)clsrobjdtypesnewdtypedtrrrr~s<        z finfo.__new__cCst||_t|}dD] }t||t||q dD]}t||t||jdq|jjd|_|jjd|_ |j |_ |j jd|_ |j |_ |j|_||_|j|_|j|_|j|_|j|_|j|_|S)N)r;rZrXrWrVrU)r6r<r2rr_)rrrsetattrgetattrflatitemsizebitsr4maxminr1rZnexprYnmantrOr?strip _str_tinyr@_str_maxr>r=rA)rBrrOwordrrrrs&       z finfo._initcCsd}||jS)NaMachine parameters for %(dtype)s --------------------------------------------------------------- precision = %(precision)3s resolution = %(_str_resolution)s machep = %(machep)6s eps = %(_str_eps)s negep = %(negep)6s epsneg = %(_str_epsneg)s minexp = %(minexp)6s tiny = %(_str_tiny)s maxexp = %(maxexp)6s max = %(_str_max)s nexp = %(nexp)6s min = -max --------------------------------------------------------------- )r8rBr'rrr__str__s z finfo.__str__cCs"|jj}|j}||d<d|S)NklasszZ%(klass)s(resolution=%(resolution)s, min=-%(_str_max)s, max=%(_str_max)s, dtype=%(dtype)s)) __class__rGr8r)rBcdrrr__repr__s  zfinfo.__repr__N) rGrHrIrJrrrrrrrrrr'sS! c@sHeZdZdZiZiZddZeddZeddZ dd Z d d Z d S) ral iinfo(type) Machine limits for integer types. Attributes ---------- bits : int The number of bits occupied by the type. min : int The smallest integer expressible by the type. max : int The largest integer expressible by the type. Parameters ---------- int_type : integer type, dtype, or instance The kind of integer data type to get information about. See Also -------- finfo : The equivalent for floating point data types. Examples -------- With types: >>> ii16 = np.iinfo(np.int16) >>> ii16.min -32768 >>> ii16.max 32767 >>> ii32 = np.iinfo(np.int32) >>> ii32.min -2147483648 >>> ii32.max 2147483647 With instances: >>> ii32 = np.iinfo(np.int32(10)) >>> ii32.min -2147483648 >>> ii32.max 2147483647 cCs|zt||_Wntytt||_Ynw|jj|_|jjd|_d|j|jf|_|jdvr }|tj|j<Y|Sw)zMinimum value of given dtype.urr)rr _min_valsrKeyErrorr:rrBvalrrrr s  z iinfo.mincCshz tj|j}W|Sty3|jdkrtd|j>d}n td|jd>d}|tj|j<Y|Sw)zMaximum value of given dtype.rr)r _max_valsrrrr:rrrrrrs z iinfo.maxcCsd}||j|j|jdS)zString representation.zMachine parameters for %(dtype)s --------------------------------------------------------------- min = %(min)s max = %(max)s --------------------------------------------------------------- rrrrrrrrr'sz iinfo.__str__cCsd|jj|j|j|jfS)Nz%s(min=%s, max=%s, dtype=%s))rrGrrr)rBrrrr2s ziinfo.__repr__N) rGrHrIrJrrrFpropertyrrrrrrrrrs0   )-rJ__all__rrOr overridesrrrrnr r r r r rrrcsinglerLcomplex_float_ clongfloat longfloatr _title_fmtrKdictint64rint32rslonglongrMint16r/rNrQrprrrrrrrrrsf     / &