(self, a, b, tags)
| 709 | # cond(x, p) for p in (None, 2, -2) |
| 710 | |
| 711 | def do(self, a, b, tags): |
| 712 | c = asarray(a) # a might be a matrix |
| 713 | if 'size-0' in tags: |
| 714 | assert_raises(LinAlgError, linalg.cond, c) |
| 715 | return |
| 716 | |
| 717 | # +-2 norms |
| 718 | s = linalg.svd(c, compute_uv=False) |
| 719 | assert_almost_equal( |
| 720 | linalg.cond(a), s[..., 0] / s[..., -1], |
| 721 | single_decimal=5, double_decimal=11) |
| 722 | assert_almost_equal( |
| 723 | linalg.cond(a, 2), s[..., 0] / s[..., -1], |
| 724 | single_decimal=5, double_decimal=11) |
| 725 | assert_almost_equal( |
| 726 | linalg.cond(a, -2), s[..., -1] / s[..., 0], |
| 727 | single_decimal=5, double_decimal=11) |
| 728 | |
| 729 | # Other norms |
| 730 | cinv = np.linalg.inv(c) |
| 731 | assert_almost_equal( |
| 732 | linalg.cond(a, 1), |
| 733 | abs(c).sum(-2).max(-1) * abs(cinv).sum(-2).max(-1), |
| 734 | single_decimal=5, double_decimal=11) |
| 735 | assert_almost_equal( |
| 736 | linalg.cond(a, -1), |
| 737 | abs(c).sum(-2).min(-1) * abs(cinv).sum(-2).min(-1), |
| 738 | single_decimal=5, double_decimal=11) |
| 739 | assert_almost_equal( |
| 740 | linalg.cond(a, np.inf), |
| 741 | abs(c).sum(-1).max(-1) * abs(cinv).sum(-1).max(-1), |
| 742 | single_decimal=5, double_decimal=11) |
| 743 | assert_almost_equal( |
| 744 | linalg.cond(a, -np.inf), |
| 745 | abs(c).sum(-1).min(-1) * abs(cinv).sum(-1).min(-1), |
| 746 | single_decimal=5, double_decimal=11) |
| 747 | assert_almost_equal( |
| 748 | linalg.cond(a, 'fro'), |
| 749 | np.sqrt((abs(c)**2).sum(-1).sum(-1) |
| 750 | * (abs(cinv)**2).sum(-1).sum(-1)), |
| 751 | single_decimal=5, double_decimal=11) |
| 752 | |
| 753 | |
| 754 | class TestCond(CondCases): |
nothing calls this directly
no test coverage detected