3 import numpy.testing
as npt
13 c = ch.context.get_instance()
15 print(
"precision: ", prec)
147 d_mat = ch.obj_float(c, np.random.randn(m, m))
148 d_U = ch.obj_float(c, np.random.randn(m, m))
149 d_EV = ch.obj_float(c, np.random.randn(m))
150 d_EV2 = ch.obj_float(c, np.random.randn(m))
152 d_res = d_mat.gemm(d_mat, op_a=
'n', op_b=
't')
154 ch.syevd_float(d_res, d_EV, d_U)
157 Mat = np.array(d_res)
160 npt.assert_almost_equal(np.dot(np.dot(U, EV), U.T), Mat, decimal=dec - 1)
162 err = np.amax(np.abs(Mat - np.dot(np.dot(U, EV), U.T)))
166 print(
"out of place, compute U")
169 npt.assert_almost_equal(err, 0., decimal=dec)
171 d_res = d_mat.gemm(d_mat, op_a=
'n', op_b=
't')
172 ch.syevd_float(d_res, d_EV2, computeU=
False)
174 err = np.amax(np.abs(np.array(d_EV) - np.array(d_EV2)))
176 print(
"in place, U not computed")
178 npt.assert_almost_equal(np.array(d_EV), np.array(d_EV2), decimal=dec - 2)
183 d_mat = ch.obj_double(c, np.random.randn(m, m))
184 d_U = ch.obj_double(c, np.random.randn(m, m))
185 d_EV = ch.obj_double(c, np.random.randn(m))
186 d_EV2 = ch.obj_double(c, np.random.randn(m))
188 d_res = d_mat.gemm(d_mat, op_a=
'n', op_b=
't')
190 ch.syevd_double(d_res, d_EV, d_U)
193 Mat = np.array(d_res)
196 npt.assert_almost_equal(np.dot(np.dot(U, EV), U.T), Mat, decimal=2 * dec - 1)
198 err = np.amax(np.abs(Mat - np.dot(np.dot(U, EV), U.T)))
202 print(
"out of place, compute U")
205 npt.assert_almost_equal(err, 0., decimal=dec)
207 d_res = d_mat.gemm(d_mat, op_a=
'n', op_b=
't')
208 ch.syevd_double(d_res, d_EV2, computeU=
False)
210 err = np.amax(np.abs(np.array(d_EV) - np.array(d_EV2)))
212 print(
"in place, U not computed")
214 npt.assert_almost_equal(np.array(d_EV), np.array(d_EV2), decimal=2 * dec - 2)