(self)
| 495 | @pytest.mark.skipif(IS_WASM, |
| 496 | reason="fp exceptions don't work in wasm.") |
| 497 | def test_half_fpe(self): |
| 498 | with np.errstate(all='raise'): |
| 499 | sx16 = np.array((1e-4,), dtype=float16) |
| 500 | bx16 = np.array((1e4,), dtype=float16) |
| 501 | sy16 = float16(1e-4) |
| 502 | by16 = float16(1e4) |
| 503 | |
| 504 | # Underflow errors |
| 505 | assert_raises_fpe('underflow', lambda a, b:a*b, sx16, sx16) |
| 506 | assert_raises_fpe('underflow', lambda a, b:a*b, sx16, sy16) |
| 507 | assert_raises_fpe('underflow', lambda a, b:a*b, sy16, sx16) |
| 508 | assert_raises_fpe('underflow', lambda a, b:a*b, sy16, sy16) |
| 509 | assert_raises_fpe('underflow', lambda a, b:a/b, sx16, bx16) |
| 510 | assert_raises_fpe('underflow', lambda a, b:a/b, sx16, by16) |
| 511 | assert_raises_fpe('underflow', lambda a, b:a/b, sy16, bx16) |
| 512 | assert_raises_fpe('underflow', lambda a, b:a/b, sy16, by16) |
| 513 | assert_raises_fpe('underflow', lambda a, b:a/b, |
| 514 | float16(2.**-14), float16(2**11)) |
| 515 | assert_raises_fpe('underflow', lambda a, b:a/b, |
| 516 | float16(-2.**-14), float16(2**11)) |
| 517 | assert_raises_fpe('underflow', lambda a, b:a/b, |
| 518 | float16(2.**-14+2**-24), float16(2)) |
| 519 | assert_raises_fpe('underflow', lambda a, b:a/b, |
| 520 | float16(-2.**-14-2**-24), float16(2)) |
| 521 | assert_raises_fpe('underflow', lambda a, b:a/b, |
| 522 | float16(2.**-14+2**-23), float16(4)) |
| 523 | |
| 524 | # Overflow errors |
| 525 | assert_raises_fpe('overflow', lambda a, b:a*b, bx16, bx16) |
| 526 | assert_raises_fpe('overflow', lambda a, b:a*b, bx16, by16) |
| 527 | assert_raises_fpe('overflow', lambda a, b:a*b, by16, bx16) |
| 528 | assert_raises_fpe('overflow', lambda a, b:a*b, by16, by16) |
| 529 | assert_raises_fpe('overflow', lambda a, b:a/b, bx16, sx16) |
| 530 | assert_raises_fpe('overflow', lambda a, b:a/b, bx16, sy16) |
| 531 | assert_raises_fpe('overflow', lambda a, b:a/b, by16, sx16) |
| 532 | assert_raises_fpe('overflow', lambda a, b:a/b, by16, sy16) |
| 533 | assert_raises_fpe('overflow', lambda a, b:a+b, |
| 534 | float16(65504), float16(17)) |
| 535 | assert_raises_fpe('overflow', lambda a, b:a-b, |
| 536 | float16(-65504), float16(17)) |
| 537 | assert_raises_fpe('overflow', np.nextafter, float16(65504), float16(np.inf)) |
| 538 | assert_raises_fpe('overflow', np.nextafter, float16(-65504), float16(-np.inf)) |
| 539 | assert_raises_fpe('overflow', np.spacing, float16(65504)) |
| 540 | |
| 541 | # Invalid value errors |
| 542 | assert_raises_fpe('invalid', np.divide, float16(np.inf), float16(np.inf)) |
| 543 | assert_raises_fpe('invalid', np.spacing, float16(np.inf)) |
| 544 | assert_raises_fpe('invalid', np.spacing, float16(np.nan)) |
| 545 | |
| 546 | # These should not raise |
| 547 | float16(65472)+float16(32) |
| 548 | float16(2**-13)/float16(2) |
| 549 | float16(2**-14)/float16(2**10) |
| 550 | np.spacing(float16(-65504)) |
| 551 | np.nextafter(float16(65504), float16(-np.inf)) |
| 552 | np.nextafter(float16(-65504), float16(np.inf)) |
| 553 | np.nextafter(float16(np.inf), float16(0)) |
| 554 | np.nextafter(float16(-np.inf), float16(0)) |
nothing calls this directly
no test coverage detected