def calc_Vsh_l(A, lm1_sqrt, sanity_checks=False): D = A.shape[2] Dm1 = A.shape[1] q = A.shape[0] L = sp.zeros((D, q, Dm1), dtype=A.dtype, order='C') for s in xrange(q): L[:, s, :] = lm1_sqrt.dot(A[s]).conj().T L = L.reshape((D, q * Dm1)) V = ns.nullspace_qr(L) if sanity_checks: if not sp.allclose(L.dot(V), 0): log.warning("Sanity Fail in calc_Vsh_l!: LV != 0") if not sp.allclose(V.conj().T.dot(V), sp.eye(V.shape[1])): log.warning("Sanity Fail in calc_Vsh_l!: V H(V) != eye") V = V.reshape((q, Dm1, q * Dm1 - D)) Vsh = sp.transpose(V.conj(), axes=(0, 2, 1)) Vsh = sp.asarray(Vsh, order='C') if sanity_checks: M = eps_l_noop(lm1_sqrt, A, V) if not sp.allclose(M, 0): log.warning("Sanity Fail in calc_Vsh_l!: Bad Vsh") return Vsh
def calc_Vsh_l(A, lm1_sqrt, sanity_checks=False): D = A.shape[2] Dm1 = A.shape[1] q = A.shape[0] L = sp.zeros((D, q, Dm1), dtype=A.dtype, order='C') for s in xrange(q): L[:,s,:] = lm1_sqrt.dot(A[s]).conj().T L = L.reshape((D, q * Dm1)) V = ns.nullspace_qr(L) if sanity_checks: if not sp.allclose(L.dot(V), 0): log.warning("Sanity Fail in calc_Vsh_l!: LV != 0") if not sp.allclose(V.conj().T.dot(V), sp.eye(V.shape[1])): log.warning("Sanity Fail in calc_Vsh_l!: V H(V) != eye") V = V.reshape((q, Dm1, q * Dm1 - D)) Vsh = sp.transpose(V.conj(), axes=(0, 2, 1)) Vsh = sp.asarray(Vsh, order='C') if sanity_checks: M = eps_l_noop(lm1_sqrt, A, V) if not sp.allclose(M, 0): log.warning("Sanity Fail in calc_Vsh_l!: Bad Vsh") return Vsh
def calc_Vsh(A, r_s, sanity_checks=False): D = A.shape[2] Dm1 = A.shape[1] q = A.shape[0] R = sp.zeros((D, q, Dm1), dtype=A.dtype, order='C') for s in xrange(q): R[:, s, :] = r_s.dot(A[s].conj().T) R = R.reshape((q * D, Dm1)) Vconj = ns.nullspace_qr(R.conj().T).T if sanity_checks: if not sp.allclose(mm.mmul(Vconj.conj(), R), 0): log.warning("Sanity Fail in calc_Vsh!: VR != 0") if not sp.allclose(mm.mmul(Vconj, Vconj.conj().T), sp.eye(Vconj.shape[0])): log.warning("Sanity Fail in calc_Vsh!: V H(V) != eye") Vconj = Vconj.reshape((q * D - Dm1, D, q)) Vsh = Vconj.T Vsh = sp.asarray(Vsh, order='C') if sanity_checks: Vs = sp.transpose(Vsh, axes=(0, 2, 1)).conj() M = eps_r_noop(r_s, Vs, A) if not sp.allclose(M, 0): log.warning("Sanity Fail in calc_Vsh!: Bad Vsh") return Vsh
def calc_Vsh(A, r_s, sanity_checks=False): D = A.shape[2] Dm1 = A.shape[1] q = A.shape[0] R = sp.zeros((D, q, Dm1), dtype=A.dtype, order='C') for s in xrange(q): R[:,s,:] = r_s.dot(A[s].conj().T) R = R.reshape((q * D, Dm1)) Vconj = ns.nullspace_qr(R.conj().T).T if sanity_checks: if not sp.allclose(mm.mmul(Vconj.conj(), R), 0): log.warning("Sanity Fail in calc_Vsh!: VR != 0") if not sp.allclose(mm.mmul(Vconj, Vconj.conj().T), sp.eye(Vconj.shape[0])): log.warning("Sanity Fail in calc_Vsh!: V H(V) != eye") Vconj = Vconj.reshape((q * D - Dm1, D, q)) Vsh = Vconj.T Vsh = sp.asarray(Vsh, order='C') if sanity_checks: Vs = sp.transpose(Vsh, axes=(0, 2, 1)).conj() M = eps_r_noop(r_s, Vs, A) if not sp.allclose(M, 0): log.warning("Sanity Fail in calc_Vsh!: Bad Vsh") return Vsh