def test_wigner3j_smalll(self): correctanswer = np.fromfile(os.path.dirname(os.path.realpath(__file__)) + '/testset_smalll_128',dtype='float64').reshape(1000,7) #np.testing.assert_approx_equal(correctanswer[:,-1], np.array([wp.wigner3j(item[0],item[1],item[2],item[3],item[4],item[5]) for item in correctanswer])) pas = True for item in correctanswer: if abs((item[6] - wp.wigner3j(item[0],item[1],item[2],item[3],item[4],item[5]))/item[6]) > 1e-10: print item[:6].astype('int32'), item[6], wp.wigner3j(item[0],item[1],item[2],item[3],item[4],item[5]) pas = False self.assertTrue(pas)
def test_wigner3j_smalll(self): correctanswer = np.fromfile(os.path.dirname(os.path.realpath(__file__)) + '/testset_smalll_128',dtype='float64').reshape(1000,7) #np.testing.assert_approx_equal(correctanswer[:,-1], np.array([wp.wigner3j(item[0],item[1],item[2],item[3],item[4],item[5]) for item in correctanswer])) pas = True for item in correctanswer: if abs((item[6] - wp.wigner3j(item[0],item[1],item[2],item[3],item[4],item[5]))/item[6]) > 1e-10: print(item[:6].astype('int32'), item[6], wp.wigner3j(item[0],item[1],item[2],item[3],item[4],item[5])) pas = False self.assertTrue(pas)
def get_Bulm(Blm, freq=137, d=np.array([3.0, 6.0, 0.0])): k = 2 * pi * freq / 299.792458 lmax = 4 Bulm = {} for l in range(lmax + 1): for mm in range(-l, l + 1): Bulm[(l, mm)] = 0 for l1 in range(lmax + 1): for mm1 in range(-l1, l1 + 1): for l2 in range(abs(l - l1), l + l1 + 1): mm2 = -(mm + mm1) if abs(mm2) <= l2: Bulm[(l, mm)] += 4 * pi * (1j**l2) * sphj( l2, k * la.norm(d)) * np.conj( spheh( l2, mm2, ctos(d)[1], ctos(d)[2])) * Blm[(l1, mm1)] * m.sqrt( (2 * l + 1) * (2 * l1 + 1) * (2 * l2 + 1) / (4 * pi)) * wigner3j( l, l1, l2, 0, 0, 0) * wigner3j( l, l1, l2, mm, mm1, mm2) return Bulm
def WignerFac(l1,l3,m1,m3): fac1 = wp.wigner3j(l1,l3,0, 0,0,0) fac2 = wp.wigner3j(l1,l3,0 ,m1,-m3,0) return fac1*fac2
def test_bug3(self): self.assertAlmostEqual(wp.wigner3j(751, 856, 1200, 464, -828, 364), -9.41731061215e-58, 62)
def test_bug2(self): self.assertAlmostEqual(wp.wigner3j(529, 992, 1243, 196, -901, 705), 1.97986e-18, 23)
import wignerpy._wignerpy as wp """ The argument goes that we're interested in what couples to l_sky = m_sky = 0, the constant mode of the sky """ l_beam = np.arange(0,3) l_fringe = np.arange(0,3) for l_b in l_beam: for l_f in l_fringe: for m_b in np.arange(-l_b,l_b+1): for m_f in np.arange(-l_f,l_f+1): print l_b, 0, l_f print m_b, 0, m_f fac1 = wp.wigner3j(l_b, 0, l_f,0,0,0) fac2 = wp.wigner3j(l_b, 0, l_f,m_b, 0, m_f) print fac1, fac2, fac1*fac2 print
def get_Bulm(Blm,freq=137,d=np.array([3.0,6.0,0.0])): k = 2*pi*freq/299.792458 lmax = 4 Bulm={} for l in range(lmax+1): for mm in range(-l,l+1): Bulm[(l,mm)]=0 for l1 in range(lmax+1): for mm1 in range(-l1,l1+1): for l2 in range(abs(l-l1),l+l1+1): mm2=-(mm+mm1) if abs(mm2)<=l2: Bulm[(l,mm)] += 4*pi*(1j**l2)*sphj(l2,k*la.norm(d))*np.conj(spheh(l2,mm2,ctos(d)[1],ctos(d)[2]))*Blm[(l1,mm1)]*m.sqrt((2*l+1)*(2*l1+1)*(2*l2+1)/(4*pi))*wigner3j(l,l1,l2,0,0,0)*wigner3j(l,l1,l2,mm,mm1,mm2) return Bulm