a :jg`@sbddlZddlZddlZddlmZmZmZmZddlm Z m Z m Z m Z ddZ GdddZdS)N)uint16float16float32float64)assert_ assert_equal_OLD_PROMOTIONIS_WASMc Osfz||i|Wn@tyR}z(tt||dkd|WYd}~nd}~00tdd|dS)Nrz%Did not raise floating point %s errorF)FloatingPointErrorrstrfind)ZstrmatchcallableargskwargsexcrE/usr/local/lib/python3.9/site-packages/numpy/_core/tests/test_half.pyassert_raises_fpe src@sTeZdZddZddZejdddgdd Zejdddgd d Z ejd gd ejdgd ejde j e j ge ddZejgde j e jdfe j e jdfgddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Ze d'd(Zejjed)kd*d+ejjed,d+d-d.Zd/d0Z d1S)2TestHalfc Cstjdtd|_t|j_tjdd4tj|jtd|_ tj|jt d|_ Wdn1s^0Yt tjdddtdtjdd d tdf|_ t|j _tj|j td|_tj|j t d|_|j d d|_|jd d|_|jd d|_dS) Nidtypeignoreinvalidiri|)nparangerall_f16rrerrstatearrayrall_f32rall_f64Z concatenate nonan_f16Z nonan_f32Z nonan_f64 finite_f16 finite_f32 finite_f64)selfrrr setup_methods 0zTestHalf.setup_methodcCsBtjdd tj|jtd}Wdn1s20Y||k}t|j|jtd||jtdtjdd tj|j td}Wdn1s0Y||k}t|j|jtd||jtdtj|j tj d}tj|td}t|j jtd|jtdt dd}tj|td}tj|t d}t||dS)z[Checks that all 16-bit values survive conversion to/from 32-bit and 64-bit floatrrrNii)rr r!r"rrrviewrr#r$Z longdoublerint)r(bZb_nnZa_ldZi_intZi_f16jrrrtest_half_conversions+s*..  zTestHalf.test_half_conversions string_dtSUcCsdt|d}ttj||ks&Jt|tj|ksB}||}|tj|ksLJqLdS)Nrp>r?r)rrr*rr4range) r(r=rErFZsmallest_valueZrounded_to_zeroiZlarger_patternZ larger_valuerrr(test_half_conversion_denormal_round_evens    z1TestHalf.test_half_conversion_denormal_round_evencCstjddtt|jt|jtt|jt|jtt|jt|jtt|jt|jtt t dtj t tj }t |j|k t ||jk t |j|kt ||jkt |j|k t ||jk t |j|k t ||jk t |j|k t ||jk t |j|k t ||jk Wdn1s0YdS)Nrall)rr risnanrr"isinfisfinitesignbitspacingrrBnanranyrN)r(rUrrrtest_nans_infss& zTestHalf.test_nans_infscCsVtddddddddd d d d d dtjtj g}tjgdtd}t|_t||dS)z,Confirms a small number of known half values?@gg?T?rO ?rIgprg)i<ii@iif.iU5i{iirir|rrN)rr!rBrrrrr(ar,rrrtest_half_valuess  zTestHalf.test_half_valuescCstjgdtd}dddddddtjg}tjdd tj|td}Wd n1sX0Yt||tj|td}tjdd tj|td}Wd n1s0Yt||d S) z7Checks that rounding when converting to half is correct)g`>g`>gP>g?g?g?iirrIgg?rXrOr)ZoverN)rr!rrBr rrr)r(rcZroundedr,rrrtest_half_roundings&   , ,zTestHalf.test_half_roundingc Cs|jjtd}d|d@d?}tj|d@d?tjdd}|d@d}||d kd 7<d ||d k<||d |}t|j|kd }t|d kr|d }t |j|d|||j|||ft|j |kd }t|d kr|d }t |j |d|||j |||fdS)z_Take every finite float16, and check the casting functions with a manual conversion.rrYr`ra igP?irirZrz.First non-equal is half value 0x%x -> %g != %gN) r%r*rrr!Zint32nonzeror&lenrr') r(Za_bitsZa_sgnZa_expZa_manZa_manualZa32_failZ bad_indexZa64_failrrrtest_half_correctnesss:   zTestHalf.test_half_correctnesscCs$|jddd}tj|td}||t||t|dd|ddkt|dd|ddk t|dd|ddkt|dd|ddk tt |dd|ddkdj |j dtt |dd|ddkdj |j ddS)z'Make sure comparisons are working rightNrrrrr?) r$rCrr!rsortrrrNrVrhsizerbrrrtest_half_ordering#s  " "0zTestHalf.test_half_orderingc Cshttjdtdtjdtdtjdtd}|dt|tjdtdtjgdtd}t| dgd| }| |j }t| dgdtjdddtd}tjd td}tt||d tjdtj d dd d ddgtd}t|dtjdtj d tjd tjddgtd}t|dtjdtd}tdD]}t|||qLdS)zTest the various ArrFuncsrgr)r)rrrg#B ǻrrIgT>r)r?rnr>)_g)@g333333@g@g(@rnN)rrrrrZzerosfillr3r!rhbyteswapr*rZ newbyteorderdotrBZargmaxrUrJitem)r(rcr,rKrrrtest_half_funcs:s>     "& zTestHalf.test_half_funcscCstjdtd}tjtjftd}tjtjftd}|jtd}tt |dd|dd|ddtt |dd||ddtt |d| |d tt |dd| |ddtt |||dtt | ||d tt |||tt || |dtt | ||d tt | | | tt |||dtt |||dtt |||tt |||tt ||||dO}tt |dt |dtt |dd|dd|ddtt |d||d tt |dd||ddtt |dd| |ddtt |||d tt | ||dtt |||dtt |||ddS)z Test np.spacing and np.nextafterrarNrrrr`) rrrr!rBrrUr*rrTrA)r(rcZhinfZhnanZa_f16rrrtest_spacing_nextafterbs: ,"$,"$zTestHalf.test_spacing_nextaftercCstjgdtd}tjgdtd}tjddtj tjdgtd}tt||gdtt||gdtt||gd tt ||gd tt ||gd tt ||gd tt ||gd tt ||gdtt||gdtt||gdtt||gdtt||gdtt||gdtt|gdtt|gd tt|gdtt|gdtt|gdtt||gdtt||gdt||}tt|dd|d<t|gdtt||gdt||}tt|dd|d<t|ddtj ddgtt||gdtt||gdtt||gdtt||ddtj ddgtt||gdtt||gdtt ||gdgdftt!|gd tt"|gd!tt#|gd"tt$||tt%|gdtt&|gd#tt'||tt(|gd$tt)|gd%|ftt*|gd&gd'ftt+|gdgd(d)S)*zTest the various ufuncs)rrr?rsr?r)rrrnrrsr2rrro)rrror2rn)r?rrr)rrnr?ro)r?r?rgT?)FFFTF)TTTFT)FTFFT)FTFTT)TFTFF)TFTTF)FTTTT)TTTTT)TFFFF)FFTFF)TTFFT)r?rnrrsr2)rrnr?rsr2r2)rrnrrro)rrrrrsr?rr)rrnrrsrors)rrr?rr)rrrrr?)rsrr| )r}rg?r[)rrrrr)r?rr{)rrrrr)rrrrr)rg?r>r>g?)r?r2rr2r?)rrrgrs@ N),rr!rrBrUraddsubtractmultiplydivideequal not_equallessZ less_equalZgreaterZ greater_equal logical_and logical_or logical_xorZ logical_notrPrQrRrScopysignmaximumrminimumZfmaxZfminZ floor_divide remainderdivmodZsquareZ reciprocalZ ones_like conjugateabsolutenegativeZpositivesignmodffrexpldexp)r(rcr,cxrrrtest_half_ufuncssd   zTestHalf.test_half_ufuncscCstjdtd}tjdtd}td}td}t|djtksBJt|djtksXJt||jtksnJ|rvtnt}t||j|ksJt||jtksJt||jtksJ|rtnt}t|dj|ksJt|dj|ksJt||js Jtt||js$Jtt||jsz(TestHalf.test_half_fpe..cSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||Srrrrrrrrr]icSs||Srrrrrrrrr^cSs||Srrrrrrrrg?r?cSs||SrrrrrrrrgcSs||Srrrrrrr rg?rsoverflowcSs||Srrrrrrr rcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrcSs||SrrrrrrrrrOcSs||Srrrrrrrrr\ri g ?r_rg) rr r!rrrArBrTrrU)r(Zsx16Zbx16Zsy16Zby16rrr test_half_fpes|              zTestHalf.test_half_fpecCsPGddd}tjdtd}|}|j|_t|}t|jtkt||dS)z5Test that half is compatible with __array_interface__c@s eZdZdS)z1TestHalf.test_half_array_interface..DummyN)__name__ __module__ __qualname__rrrrDummy4srrrN)rr3rZ__array_interface__r!rrr)r(rrcr,rrrrtest_half_array_interface2s z"TestHalf.test_half_array_interfaceN)!rrrr)r.pytestmarkZ parametrizer6r8rrrZ_no_nep50_warningrDZuint32Zuint64rLrWrdrerjrmrxryrrZskipifplatformmachiner rrrrrrrsF#  5    $(-@  Ar)rrnumpyrrrrrZ numpy.testingrrrr rrrrrrs