1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
U
O±dÕ`ã@sbddlZddlZddlZddlmZmZmZmZddlm    Z    m
Z
m Z m Z dd„Z Gdd„dƒZdS)éN)Úuint16Úfloat16Úfloat32Úfloat64)Úassert_Ú assert_equalÚ_OLD_PROMOTIONÚIS_WASMc
Os`z|||ŽWn>tk
rL}z tt|ƒ |¡dkd|ƒW5d}~XYnXtdd|ƒdS)Nrz%Did not raise floating point %s errorF)ÚFloatingPointErrorrÚstrÚfind)ZstrmatchÚcallableÚargsÚkwargsÚexc©rúQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/core/tests/test_half.pyÚassert_raises_fpe    sÿÿrc@sZeZdZdd„Zdd„Zej dddg¡dd    „ƒZej dddg¡d
d „ƒZ    ej d d ddg¡ej dd ddg¡ej de
j e
j g¡e
  ¡dd„ƒƒƒƒZej dddge
j e
jdfe
j e
jdfg¡dd„ƒZdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Ze
  ¡d*d+„ƒZejje ¡d,kd-d.ejjed/d.d0d1„ƒƒZd2d3„Z d S)4ÚTestHalfc    CsÈtjdtd|_t|j_tj|jtd|_tj|jt    d|_
t  tjdddtdtjdddtdf¡|_ t|j _tj|j td|_ tj|j t    d|_|j dd…|_|j dd…|_|jdd…|_dS)    Ni©Údtypeéüiÿéÿÿÿÿri|é)ÚnpÚarangerÚall_f16rrÚarrayrÚall_f32rÚall_f64Z concatenateÚ    nonan_f16Z    nonan_f32Z    nonan_f64Ú
finite_f16Ú
finite_f32Ú
finite_f64)ÚselfrrrÚ setup_methodsÿÿzTestHalf.setup_methodcCsÊtj|jtd}t|jjtd|jtdƒtj|jtd}t|jjtd|jtdƒtj|j    tj
d}tj|td}t|j    jtd|jtdƒt  dd¡}tj|td}tj|t d}t||ƒdS)z[Checks that all 16-bit values survive conversion
           to/from 32-bit and 64-bit floatriøÿÿiN) rrrrrrÚviewrrr Z
longdoublerÚint)r$ÚbZa_ldZi_intZi_f16ÚjrrrÚtest_half_conversions(s"
ÿ
ÿ
ÿ zTestHalf.test_half_conversionsÚ    string_dtÚSÚUcCsdt |›d¡}t tj|¡|ks&t‚t |tj¡|ks<t‚tjdtjd |¡}|j|ks`t‚dS)NÚ32ér)rrZ promote_typesrÚAssertionErrorÚonesÚastype)r$r+Ú expected_dtZarrrrrÚtest_half_conversion_to_stringFs
z'TestHalf.test_half_conversion_to_stringcCs2tjd|d}| tj¡tjdtjdks.t‚dS)Nz3.1416rg§èH.ÿ!    @)rrr2rr0)r$r+ÚstringrrrÚ test_half_conversion_from_stringPsz)TestHalf.test_half_conversion_from_stringÚoffsetNÚupÚdownÚshiftÚfloat_tc
Cs”t t tj¡j¡ tj¡}tjd|dtjd}| tj¡ |¡}|dkrrd|dd…|dd…dd…}n:|dkr d|dd…|dd…dd…}n |dd…}|dkrÈt ||tj    ƒ¡}n|dkrät ||tj     ƒ¡}| tj¡ tj¡}|dd… 
¡}|dkr"|dkr"d}    n|dkr<|dkr<d}    nd}    |dkrn|ddd… tj ¡d    |    7<n| tj ¡d    |    7<t ||ƒdS)
Nrrrr8çà?rr9é.) rrZfinfoÚmaxr&rrr2Ú    nextafterÚinfÚcopyÚint16r)
r$r;r:r7Z max_patternZ f16s_patternsZ
f16s_floatZ res_patternsZ cmp_patternsZ shift_patternrrrÚtest_half_conversion_roundingUs.&&     
$z&TestHalf.test_half_conversion_roundingÚuint_tÚbitséé4c    CsŠt d¡ tj¡ |¡}|dks$t‚||dƒ}| tj¡dksDt‚t|ƒD]8}| |¡|d|>ƒB}| |¡}| tj¡|ksLt‚qLdS)Nrçp>r=r)rrr&rr2r0Úrange)    r$r;rDrEZsmallest_valueZrounded_to_zeroÚiZlarger_patternZ larger_valuerrrÚ(test_half_conversion_denormal_round_evenŽs   
z1TestHalf.test_half_conversion_denormal_round_evenc    Cs’tjddztt |j¡t |j¡ƒtt |j¡t |j¡ƒtt |j¡t |j¡ƒtt |j¡t |j¡ƒtt     t
dƒ¡tj ƒt
tj ƒ}t |j|k ¡ ƒt ||jk ¡ ƒt |j|k ¡ƒt ||jk ¡ƒt |j|k ¡ ƒt ||jk ¡ ƒt |j|k ¡ ƒt ||jk ¡ ƒt |j|k ¡ ƒt ||jk ¡ ƒt |j|k ¡ ƒt ||jk ¡ ƒW5QRXdS)NÚignore©Úalléàÿ)rÚerrstaterÚisnanrrÚisinfÚisfiniteÚsignbitÚspacingrr@ÚnanrÚanyrN)r$rVrrrÚtest_nans_infs¥s&
zTestHalf.test_nans_infscCsrt ddddddddd    d
d d d dtjtj g¡}tjddddddddddddd dddgtd}t|_t||ƒdS) z,Confirms a small number of known half valuesçð?çð¿ç@gÀg˜¹?çTÕ?rOé ÿÿç?ç¿rHgp¾rg€i<i¼i@iÀif.iU5iÿ{iÿûéi„ri€é€é|rrN)rrr@rrrr©r$Úar(rrrÚtest_half_valuesÃsHùùùzTestHalf.test_half_valuesc    Cs¦tjddddddddgtd    }d
d d d d d dtjg}tjddtj|td    }W5QRXt||ƒtj|td    }tjddtj|td    }W5QRXt||ƒdS)z7Checks that rounding when converting to half is correctg`>g`>gP>gð?gð?gð?iïÿiðÿrrHggð?rYrOrL)ZoverN)rrrr@rPrrr)r$rdZroundedr(rrrÚtest_half_roundingØs6ùø    ù
 
zTestHalf.test_half_roundingc    Cs|jjtd}d|d@d?}tj|d@d?tjdd}|d@d}||d    kd
7<d ||d    k<||d |}t |j|k¡d }t|ƒd krÆ|d }t    |j|d|j||j|||fƒt |j
|k¡d }t|ƒd kr|d }t    |j
|d|j||j
|||fƒdS)z_Take every finite float16, and check the casting functions with
           a manual conversion.rrZraérbé
iÿgP?iñÿÿÿriòÿÿÿr[rz,First non-equal is half value %x -> %g != %gN) r!r&rrrÚint32Únonzeror"Úlenrr#)    r$Za_bitsZa_sgnZa_expZa_manZa_manualZa32_failZ    bad_indexZa64_failrrrÚtest_half_correctness÷s:   þÿÿþÿÿzTestHalf.test_half_correctnesscCs$|jddd… ¡}tj|td}| ¡| ¡t||ƒt|dd…|dd…k ¡ƒt|dd…|dd…k     ¡ ƒt|dd…|dd…k ¡ƒt|dd…|dd…k     ¡ ƒtt 
|dd…|dd…k¡dj |j dƒtt 
|dd…|dd…k¡dj |j dƒdS)z'Make sure comparisons are working rightNrrrrr=) r rArrrÚsortrrrNrWrjÚsizercrrrÚtest_half_orderings
 " "0zTestHalf.test_half_orderingc    Csjttjdtdtjdtdƒtjdtd}| d¡t|tjdtdƒtjddddddd    gtd}t|     ¡dd
d d gƒ| 
¡  ¡}t|     ¡dd
d d gƒtjddd td}tjdtd}tt  ||¡dƒtjdtj dd ddddgtd}t| ¡dƒtjdtj dtj dtjddgtd}t| ¡d ƒtjdtd}tdƒD]}t| |¡|ƒqNdS)zTest the various ArrFuncsrhr)érrrg#B’ ¡œÇ»rHg‹ÖT“ÿß>r=rpér<)éé_éþÿÿÿgš™™™™)@g333333@gÍÌÌÌÌÌ@gÍÌÌÌÌÌ(@éN)rrrrrÚzerosÚfillr1rrjZbyteswapZ newbyteorderÚdotr@ZargmaxrVrIÚitem)r$rdr(rJrrrÚtest_half_funcs2s< ÿ
 ÿ  ÿ ÿ"ÿ&ÿ zTestHalf.test_half_funcscCsÐtjdtd}tjtjftd}tjtjftd}|jtd}tt     |dd…¡|dd…|dd…ƒtt 
|dd…|¡|dd…ƒtt 
|d| ¡|d ƒtt 
|dd…| ¡|dd…ƒtt 
||¡|dƒtt 
| |¡|d ƒtt 
||¡|ƒtt 
|| ¡|dƒtt 
| |¡|d ƒtt 
| | ¡| ƒtt 
||¡|dƒtt 
||¡|dƒtt 
||¡|ƒtt 
||¡|ƒtt 
||¡|ƒ|dO}tt     |d¡t     |d¡ƒtt     |dd…¡|dd…|dd…ƒtt 
|d|¡|d ƒtt 
|dd…|¡|dd…ƒtt 
|dd…| ¡|dd…ƒtt 
||¡|d ƒtt 
| |¡|dƒtt 
||¡|dƒtt 
||¡|dƒdS)z Test np.spacing and np.nextafterrbrNrrrra) rrrrr@rrVr&rrUr?)r$rdZhinfZhnanZa_f16rrrÚtest_spacing_nextafterYs: ,"$,"$zTestHalf.test_spacing_nextafterc    Cs
tjdddddgtd}tjdddddgtd}tjdd    tj tjd
gtd}tt ||¡dd
dd dgƒtt ||¡dd ddd    gƒtt ||¡dddd d
gƒtt     ||¡dddddgƒtt 
||¡dddddgƒtt  ||¡dddddgƒtt  ||¡dddddgƒtt  ||¡dddddgƒtt ||¡dddddgƒtt ||¡dddddgƒtt ||¡dddddgƒtt ||¡dddddgƒtt ||¡dddddgƒtt |¡dddddgƒtt |¡dddddgƒtt |¡dddddgƒtt |¡dddddgƒtt |¡dddddgƒtt ||¡dddddgƒtt ||¡dddddgƒt ||¡}tt |d¡ƒd|d<t|ddddd
gƒtt ||¡dddddgƒt ||¡}tt |d¡ƒd|d<t|dd    tj ddgƒtt ||¡dddddgƒtt ||¡ddddd
gƒtt ||¡dddddgƒtt ||¡dd    tj ddgƒtt ||¡dddddgƒtt ||¡dddddgƒtt  ||¡dddddgdddddgfƒtt !|¡dddd dgƒtt "|¡dddddgƒtt #|¡dddddgƒtt $|¡|ƒtt %|¡dddddgƒtt &|¡ddd    d dgƒtt '|¡|ƒtt (|¡d    ddddgƒtt )|¡dddddg|fƒtt *|¡dddddgdddddgfƒtt +|dddddg¡dddddgƒdS) zTest the various ufuncsrrr=rurrtrpr/rrqééüÿÿÿég˜É?gTå?FTéé    gà¿gÐ?r\éûÿÿÿéýÿÿÿgä?r<gè?rhé@é N),rrrr@rVrÚaddÚsubtractÚmultiplyÚdivideÚequalÚ    not_equalZlessZ
less_equalZgreaterZ greater_equalÚ logical_andÚ
logical_orÚ logical_xorZ logical_notrQrRrSrTÚcopysignÚmaximumrZminimumZfmaxZfminZ floor_divideÚ    remainderÚdivmodZsquareZ
reciprocalZ    ones_likeÚ    conjugateÚabsoluteÚnegativeZpositiveÚsignÚmodfÚfrexpÚldexp)r$rdr(ÚcÚxrrrÚtest_half_ufuncs†sd   *(zTestHalf.test_half_ufuncscCsÆtjdtd}tjdtd}tdƒ}tdƒ}t |d¡jtksBt‚t |d¡jtksXt‚t ||¡jtksnt‚|rvtnt}t ||¡j|kst‚t ||¡jtks¦t‚t ||¡jtks¼t‚|rÄtnt}t |d¡j|ksÞt‚t |d¡j|ksôt‚t ||¡js ttƒ‚t ||¡js$ttƒ‚t ||¡js<ttƒ‚t ||¡jsTttƒ‚t ||¡jtkslt‚t ||¡jtks„t‚|rŽtnt}t ||¡j|ksªt‚t ||¡jtksÂt‚dS)z9Test that half gets coerced properly with the other types©rrrr=r[N)rrrrÚpowerrr0r)r$Zweak_promotionZa16Za32Zb16Zb32r3rrrÚtest_half_coercionÆs.  zTestHalf.test_half_coercionZarmv5telz See gh-413.)Úreasonz!fp exceptions don't work in wasm.c    Cs²tjddštjdtd}tjdtd}tdƒ}tdƒ}tdd    d
„||ƒtdd d
„||ƒtdd d
„||ƒtdd d
„||ƒtddd
„||ƒtddd
„||ƒtddd
„||ƒtddd
„||ƒtddd
„tdƒtdƒƒtddd
„tdƒtdƒƒtddd
„tdƒtdƒƒtddd
„tdƒtdƒƒtddd
„tdƒtdƒƒtdd d
„||ƒtdd!d
„||ƒtdd"d
„||ƒtdd#d
„||ƒtdd$d
„||ƒtdd%d
„||ƒtdd&d
„||ƒtdd'd
„||ƒtdd(d
„td)ƒtd*ƒƒtdd+d
„td,ƒtd*ƒƒtdtjtd)ƒttjƒƒtdtjtd,ƒttj ƒƒtdtjtd)ƒƒtd-tjttjƒttjƒƒtd-tjttjƒƒtd-tjttj    ƒƒtd.ƒtd/ƒtd0ƒtdƒtdƒtd1ƒt td,ƒ¡t td)ƒttj ƒ¡t td,ƒttjƒ¡t ttjƒtd2ƒ¡t ttj ƒtd2ƒ¡t td2ƒttj    ƒ¡t ttj    ƒtd2ƒ¡tdƒtd1ƒtdƒtd1ƒtdƒtdƒtd3ƒtdƒW5QRXdS)4NÚraiserM)ç-Cëâ6?r)çˆÃ@r¡r¢Z    underflowcSs||S©Nr©rdr(rrrÚ<lambda>ðóz(TestHalf.test_half_fpe.<locals>.<lambda>cSs||Sr£rr¤rrrr¥ñr¦cSs||Sr£rr¤rrrr¥òr¦cSs||Sr£rr¤rrrr¥ór¦cSs||Sr£rr¤rrrr¥ôr¦cSs||Sr£rr¤rrrr¥õr¦cSs||Sr£rr¤rrrr¥ör¦cSs||Sr£rr¤rrrr¥÷r¦cSs||Sr£rr¤rrrr¥ør¦r^icSs||Sr£rr¤rrrr¥úr¦r_cSs||Sr£rr¤rrrr¥ür¦g?r=cSs||Sr£rr¤rrrr¥þr¦g¿cSs||Sr£rr¤rrrr¥r¦g?ruZoverflowcSs||Sr£rr¤rrrr¥r¦cSs||Sr£rr¤rrrr¥r¦cSs||Sr£rr¤rrrr¥r¦cSs||Sr£rr¤rrrr¥r¦cSs||Sr£rr¤rrrr¥r¦cSs||Sr£rr¤rrrr¥    r¦cSs||Sr£rr¤rrrr¥
r¦cSs||Sr£rr¤rrrr¥ r¦cSs||Sr£rr¤rrrr¥ r¦rOécSs||Sr£rr¤rrrr¥r¦r]ÚinvalidiÀÿé g ?r`rg¿)
rrPrrrr?r@rUrˆrV)r$Zsx16Zbx16Zsy16Zby16rrrÚ test_half_fpeäsŠ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzTestHalf.test_half_fpecCsPGdd„dƒ}tjdtd}|ƒ}|j|_t |¡}t|jtkƒt||ƒdS)z5Test that half is compatible with __array_interface__c@s eZdZdS)z1TestHalf.test_half_array_interface.<locals>.DummyN)Ú__name__Ú
__module__Ú __qualname__rrrrÚDummy+sr®rœrN)rr1rZ__array_interface__rrrr)r$r®rdr(r™rrrÚtest_half_array_interface)s
z"TestHalf.test_half_array_interface)!r«r¬r­r%r*ÚpytestÚmarkZ parametrizer4r6rrrZ_no_nep50_warningrCZuint32Zuint64rKrXrerfrlrorzr{r›ržZskipifÚplatformÚmachiner    rªr¯rrrrrsF
    
5  ÿÿ
$'-@
ÿÿ Ar)r²r°ÚnumpyrrrrrZ numpy.testingrrrr    rrrrrrÚ<module>s