test_diagonal_operator.py 5.81 KB
Newer Older
 Pumpe, Daniel (dpumpe) committed May 10, 2017 1 2 3 4 5 6 7 8 9 10 ``````import unittest import numpy as np from numpy.testing import assert_equal,\ assert_allclose,\ assert_approx_equal from nifty import Field,\ DiagonalOperator `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 11 ``````from test.common import generate_spaces `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 12 13 14 15 16 `````` from itertools import product from test.common import expand class DiagonalOperator_Tests(unittest.TestCase): `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 17 `````` spaces = generate_spaces() `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 18 19 20 21 22 23 24 `````` @expand(product(spaces, [True, False], [True, False])) def test_property(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag) if D.domain[0] != space: raise TypeError `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 25 `````` if D.unitary != False: `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 `````` raise TypeError if D.self_adjoint != True: raise TypeError @expand(product(spaces, [True, False], [True, False])) def test_times_adjoint(self, space, bare, copy): rand1 = Field.from_random('normal', domain=space) rand2 = Field.from_random('normal', domain=space) diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) tt1 = rand1.dot(D.times(rand2)) tt2 = rand2.dot(D.times(rand1)) assert_approx_equal(tt1, tt2) @expand(product(spaces, [True, False], [True, False])) def test_times_inverse(self, space, bare, copy): rand1 = Field.from_random('normal', domain=space) diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) tt1 = D.times(D.inverse_times(rand1)) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 46 `````` assert_allclose(rand1.val.get_full_data(), tt1.val.get_full_data()) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 47 48 49 50 51 52 53 `````` @expand(product(spaces, [True, False], [True, False])) def test_times(self, space, bare, copy): rand1 = Field.from_random('normal', domain=space) diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) tt = D.times(rand1) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 54 `````` assert_equal(tt.domainp[0], space) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 55 56 57 58 59 60 61 `````` @expand(product(spaces, [True, False], [True, False])) def test_adjoint_times(self, space, bare, copy): rand1 = Field.from_random('normal', domain=space) diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) tt = D.adjoint_times(rand1) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 62 `````` assert_equal(tt.domain[0], space) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 63 64 65 66 67 68 69 `````` @expand(product(spaces, [True, False], [True, False])) def test_inverse_times(self, space, bare, copy): rand1 = Field.from_random('normal', domain=space) diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) tt = D.inverse_times(rand1) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 70 `````` assert_equal(tt.domain[0], space) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 71 72 73 74 75 76 77 `````` @expand(product(spaces, [True, False], [True, False])) def test_adjoint_inverse_times(self, space, bare, copy): rand1 = Field.from_random('normal', domain=space) diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) tt = D.adjoint_inverse_times(rand1) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 78 `````` assert_equal(tt.domain[0], space) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 79 80 81 82 83 `````` @expand(product(spaces, [True, False], [True, False])) def test_diagonal(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 84 `````` diag_op = D.diagonal(bare=bare) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 85 86 87 88 89 90 91 92 93 94 95 96 97 98 `````` assert_allclose(diag.val.get_full_data(), diag_op.val.get_full_data()) @expand(product(spaces, [True, False], [True, False])) def test_inverse(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) diag_op = D.inverse_diagonal(bare=bare) assert_allclose(1./diag.val.get_full_data(), diag_op.val.get_full_data()) @expand(product(spaces, [True, False], [True, False])) def test_trace(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) trace_op = D.trace(bare=bare) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 99 `````` assert_allclose(trace_op, np.sum(diag.val.get_full_data())) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 100 101 102 103 104 105 `````` @expand(product(spaces, [True, False], [True, False])) def test_inverse_trace(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) trace_op = D.inverse_trace(bare=bare) `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 106 `````` assert_allclose(trace_op, np.sum(1./diag.val.get_full_data())) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 107 108 109 110 111 112 `````` @expand(product(spaces, [True, False], [True, False])) def test_trace_log(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) trace_log = D.trace_log() `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 113 `````` assert_allclose(trace_log, np.log(np.sum(diag))) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 114 115 116 117 118 119 `````` @expand(product(spaces, [True, False], [True, False])) def test_determinant(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) det = D.determinant() `````` Pumpe, Daniel (dpumpe) committed May 11, 2017 120 `````` assert_allclose(det, np.prod(diag.val.get_full_data())) `````` Pumpe, Daniel (dpumpe) committed May 10, 2017 121 122 123 124 125 126 127 128 129 130 131 132 133 134 `````` @expand(product(spaces, [True, False], [True, False])) def test_inverse_determinant(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) inv_det = D.inverse_determinant() assert_allclose(inv_det, 1./D.determinant()) @expand(product(spaces, [True, False], [True, False])) def test_log_determinant(self, space, bare, copy): diag = Field.from_random('normal', domain=space) D = DiagonalOperator(space, diagonal=diag, bare=bare, copy=copy) log_det = D.log_determinant() assert_allclose(log_det, np.log(D.determinant()))``````