(self)
| 512 | @pytest.mark.skipif(IS_WASM, |
| 513 | reason="fp exceptions don't work in wasm.") |
| 514 | def test_half_fpe(self): |
| 515 | with np.errstate(all='raise'): |
| 516 | sx16 = np.array((1e-4,), dtype=float16) |
| 517 | bx16 = np.array((1e4,), dtype=float16) |
| 518 | sy16 = float16(1e-4) |
| 519 | by16 = float16(1e4) |
| 520 | |
| 521 | # Underflow errors |
| 522 | assert_raises_fpe('underflow', lambda a, b: a * b, sx16, sx16) |
| 523 | assert_raises_fpe('underflow', lambda a, b: a * b, sx16, sy16) |
| 524 | assert_raises_fpe('underflow', lambda a, b: a * b, sy16, sx16) |
| 525 | assert_raises_fpe('underflow', lambda a, b: a * b, sy16, sy16) |
| 526 | assert_raises_fpe('underflow', lambda a, b: a / b, sx16, bx16) |
| 527 | assert_raises_fpe('underflow', lambda a, b: a / b, sx16, by16) |
| 528 | assert_raises_fpe('underflow', lambda a, b: a / b, sy16, bx16) |
| 529 | assert_raises_fpe('underflow', lambda a, b: a / b, sy16, by16) |
| 530 | assert_raises_fpe('underflow', lambda a, b: a / b, |
| 531 | float16(2.**-14), float16(2**11)) |
| 532 | assert_raises_fpe('underflow', lambda a, b: a / b, |
| 533 | float16(-2.**-14), float16(2**11)) |
| 534 | assert_raises_fpe('underflow', lambda a, b: a / b, |
| 535 | float16(2.**-14 + 2**-24), float16(2)) |
| 536 | assert_raises_fpe('underflow', lambda a, b: a / b, |
| 537 | float16(-2.**-14 - 2**-24), float16(2)) |
| 538 | assert_raises_fpe('underflow', lambda a, b: a / b, |
| 539 | float16(2.**-14 + 2**-23), float16(4)) |
| 540 | |
| 541 | # Overflow errors |
| 542 | assert_raises_fpe('overflow', lambda a, b: a * b, bx16, bx16) |
| 543 | assert_raises_fpe('overflow', lambda a, b: a * b, bx16, by16) |
| 544 | assert_raises_fpe('overflow', lambda a, b: a * b, by16, bx16) |
| 545 | assert_raises_fpe('overflow', lambda a, b: a * b, by16, by16) |
| 546 | assert_raises_fpe('overflow', lambda a, b: a / b, bx16, sx16) |
| 547 | assert_raises_fpe('overflow', lambda a, b: a / b, bx16, sy16) |
| 548 | assert_raises_fpe('overflow', lambda a, b: a / b, by16, sx16) |
| 549 | assert_raises_fpe('overflow', lambda a, b: a / b, by16, sy16) |
| 550 | assert_raises_fpe('overflow', lambda a, b: a + b, |
| 551 | float16(65504), float16(17)) |
| 552 | assert_raises_fpe('overflow', lambda a, b: a - b, |
| 553 | float16(-65504), float16(17)) |
| 554 | assert_raises_fpe('overflow', np.nextafter, float16(65504), float16(np.inf)) |
| 555 | assert_raises_fpe('overflow', np.nextafter, float16(-65504), float16(-np.inf)) # noqa: E501 |
| 556 | assert_raises_fpe('overflow', np.spacing, float16(65504)) |
| 557 | |
| 558 | # Invalid value errors |
| 559 | assert_raises_fpe('invalid', np.divide, float16(np.inf), float16(np.inf)) |
| 560 | assert_raises_fpe('invalid', np.spacing, float16(np.inf)) |
| 561 | assert_raises_fpe('invalid', np.spacing, float16(np.nan)) |
| 562 | |
| 563 | # These should not raise |
| 564 | float16(65472) + float16(32) |
| 565 | float16(2**-13) / float16(2) |
| 566 | float16(2**-14) / float16(2**10) |
| 567 | np.spacing(float16(-65504)) |
| 568 | np.nextafter(float16(65504), float16(-np.inf)) |
| 569 | np.nextafter(float16(-65504), float16(np.inf)) |
| 570 | np.nextafter(float16(np.inf), float16(0)) |
| 571 | np.nextafter(float16(-np.inf), float16(0)) |
nothing calls this directly
no test coverage detected