コード例 #1
0
ファイル: test_theta.py プロジェクト: collijk/abelfunctions
    def test_first_derivatives_oscpart(self):
        # different value of w
        Omega = self.Omega4
        w = [-0.37704918-0.18456279j, 0.63934426+0.42591413j,
             0.54918033+0.09937996j, -0.21721311-0.07808426j]
        value_z1 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[1,0,0,0]])
        value_z2 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,1,0,0]])
        value_z3 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,0,1,0]])
        value_z4 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,0,0,1]])

        maple_z1 = 1.723280564 + 1.281445835j
        maple_z2 = -1.507523639 + 2.909483373j
        maple_z3 = 4.114046968 + 1.817899948j
        maple_z4 = -3.116133948 - 1.273742661j

        error_z1 = abs(value_z1 - maple_z1)
        error_z2 = abs(value_z2 - maple_z2)
        error_z3 = abs(value_z3 - maple_z3)
        error_z4 = abs(value_z4 - maple_z4)

        self.assertLess(error_z1, 1e-8)
        self.assertLess(error_z2, 1e-8)
        self.assertLess(error_z3, 1e-8)
        self.assertLess(error_z4, 1e-8)
コード例 #2
0
ファイル: test_theta.py プロジェクト: collijk/abelfunctions
    def test_sixth_derivatives(self):
        w = [0.2+0.5j, 0.3-0.1j, -0.1+0.2j]
        Omega = self.Omega3
        
        dVec_1 = [[1,0,0],[1,0,0],[0,1,0],[0,0,1],[0,0,1],[0,1,0]]
        dVec_2 = [[1,2,3],[4,5,6],[0.7,0.8,0.9],[0.8,0.7,0.6],[5,4,3],[2,1,0]]
        #dVec_3 = [[-17.3, 6.2, 0],[3.4, 3, 1],[-9,-0.001, 2], 
        #        [1e-2, 0, 19],[210, 0.5, 1.2],[31.323, 0.3, 3]]
        #dVec_4 = [[1,2,3],[4,5,6],[7,8,9],[8,7,6],[5,4,3],[2,1,0]]
        # Neither of the above two examples pass the tests. It appears
        # that for higher order derivatives, if the norm of the directional
        # derivative is too large  

        maple_1 = 42.73836471691125 + 235.2990585642670j
        maple_2 = 0.2152838084588008*10**7 - 0.3287239590246880*10**7*1j
        #maple_3 = 0.2232644817692030*10**12 - 0.1226563725159786*10**12*1j
        #maple_4 = 0.2152838084588008*10**9 - 0.3287239590246880*10**9*1j

        deriv_1 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_1)
        deriv_2 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_2)
        #deriv_3 = RiemannTheta.oscillatory_part(w, Omega, 
        #        epsilon=1e-14, derivs=dVec_3)
        #deriv_4 = RiemannTheta.oscillatory_part(w, Omega, 
        #        epsilon=1e-14, derivs=dVec_4)

        error_1 = abs(deriv_1 - maple_1)
        error_2 = abs(deriv_2 - maple_2)
        #error_3 = abs(deriv_3 - maple_3)
        #error_4 = abs(deriv_4 - maple_4)

        self.assertLess(error_1, 1e-8)
        self.assertLess(error_2, 1e-8)
コード例 #3
0
ファイル: test_theta.py プロジェクト: collijk/abelfunctions
    def test_second_derivative_symmetric(self):
        w = [0.2+0.5j, 0.3-0.1j, -0.1+0.2j]
        Omega = [[1.j, 0.5, 0.5],
                 [0.5, 1.j, 0.5],
                 [0.5, 0.5, 1.j]]

        dz_01 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[1,0,0],[0,1,0]])
        dz_10 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,1,0],[1,0,0]])
        dz_02 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[1,0,0],[0,0,1]])
        dz_20 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,0,1],[1,0,0]])
        dz_12 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,1,0],[0,0,1]])
        dz_21 = RiemannTheta.oscillatory_part(
            w, Omega, epsilon=1e-14, derivs=[[0,0,1],[0,1,0]])

        error_01_10 = abs(dz_01 - dz_10)
        error_02_20 = abs(dz_02 - dz_20)
        error_12_21 = abs(dz_12 - dz_21)

        self.assertLess(error_01_10, 1e-8)
        self.assertLess(error_02_20, 1e-8)
        self.assertLess(error_12_21, 1e-8)
コード例 #4
0
ファイル: test_theta.py プロジェクト: slel/abelfunctions
    def test_sixth_derivatives(self):
        w = [0.2 + 0.5j, 0.3 - 0.1j, -0.1 + 0.2j]
        Omega = self.Omega3

        dVec_1 = [[1, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 1],
                  [0, 1, 0]]
        dVec_2 = [[1, 2, 3], [4, 5, 6], [0.7, 0.8, 0.9], [0.8, 0.7, 0.6],
                  [5, 4, 3], [2, 1, 0]]
        #dVec_3 = [[-17.3, 6.2, 0],[3.4, 3, 1],[-9,-0.001, 2],
        #        [1e-2, 0, 19],[210, 0.5, 1.2],[31.323, 0.3, 3]]
        #dVec_4 = [[1,2,3],[4,5,6],[7,8,9],[8,7,6],[5,4,3],[2,1,0]]
        # Neither of the above two examples pass the tests. It appears
        # that for higher order derivatives, if the norm of the directional
        # derivative is too large

        maple_1 = 42.73836471691125 + 235.2990585642670j
        maple_2 = 0.2152838084588008 * 10**7 - 0.3287239590246880 * 10**7 * 1j
        #maple_3 = 0.2232644817692030*10**12 - 0.1226563725159786*10**12*1j
        #maple_4 = 0.2152838084588008*10**9 - 0.3287239590246880*10**9*1j

        deriv_1 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_1)
        deriv_2 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_2)
        #deriv_3 = RiemannTheta.oscillatory_part(w, Omega,
        #        epsilon=1e-14, derivs=dVec_3)
        #deriv_4 = RiemannTheta.oscillatory_part(w, Omega,
        #        epsilon=1e-14, derivs=dVec_4)

        error_1 = abs(deriv_1 - maple_1)
        error_2 = abs(deriv_2 - maple_2)
        #error_3 = abs(deriv_3 - maple_3)
        #error_4 = abs(deriv_4 - maple_4)

        self.assertLess(error_1, 1e-8)
        self.assertLess(error_2, 1e-8)
コード例 #5
0
ファイル: test_theta.py プロジェクト: slel/abelfunctions
    def test_first_derivatives_oscpart(self):
        # different value of w
        Omega = self.Omega4
        w = [
            -0.37704918 - 0.18456279j, 0.63934426 + 0.42591413j,
            0.54918033 + 0.09937996j, -0.21721311 - 0.07808426j
        ]
        value_z1 = RiemannTheta.oscillatory_part(w,
                                                 Omega,
                                                 epsilon=1e-14,
                                                 derivs=[[1, 0, 0, 0]])
        value_z2 = RiemannTheta.oscillatory_part(w,
                                                 Omega,
                                                 epsilon=1e-14,
                                                 derivs=[[0, 1, 0, 0]])
        value_z3 = RiemannTheta.oscillatory_part(w,
                                                 Omega,
                                                 epsilon=1e-14,
                                                 derivs=[[0, 0, 1, 0]])
        value_z4 = RiemannTheta.oscillatory_part(w,
                                                 Omega,
                                                 epsilon=1e-14,
                                                 derivs=[[0, 0, 0, 1]])

        maple_z1 = 1.723280564 + 1.281445835j
        maple_z2 = -1.507523639 + 2.909483373j
        maple_z3 = 4.114046968 + 1.817899948j
        maple_z4 = -3.116133948 - 1.273742661j

        error_z1 = abs(value_z1 - maple_z1)
        error_z2 = abs(value_z2 - maple_z2)
        error_z3 = abs(value_z3 - maple_z3)
        error_z4 = abs(value_z4 - maple_z4)

        self.assertLess(error_z1, 1e-8)
        self.assertLess(error_z2, 1e-8)
        self.assertLess(error_z3, 1e-8)
        self.assertLess(error_z4, 1e-8)
コード例 #6
0
ファイル: test_theta.py プロジェクト: slel/abelfunctions
    def test_second_derivative_symmetric(self):
        w = [0.2 + 0.5j, 0.3 - 0.1j, -0.1 + 0.2j]
        Omega = [[1.j, 0.5, 0.5], [0.5, 1.j, 0.5], [0.5, 0.5, 1.j]]

        dz_01 = RiemannTheta.oscillatory_part(w,
                                              Omega,
                                              epsilon=1e-14,
                                              derivs=[[1, 0, 0], [0, 1, 0]])
        dz_10 = RiemannTheta.oscillatory_part(w,
                                              Omega,
                                              epsilon=1e-14,
                                              derivs=[[0, 1, 0], [1, 0, 0]])
        dz_02 = RiemannTheta.oscillatory_part(w,
                                              Omega,
                                              epsilon=1e-14,
                                              derivs=[[1, 0, 0], [0, 0, 1]])
        dz_20 = RiemannTheta.oscillatory_part(w,
                                              Omega,
                                              epsilon=1e-14,
                                              derivs=[[0, 0, 1], [1, 0, 0]])
        dz_12 = RiemannTheta.oscillatory_part(w,
                                              Omega,
                                              epsilon=1e-14,
                                              derivs=[[0, 1, 0], [0, 0, 1]])
        dz_21 = RiemannTheta.oscillatory_part(w,
                                              Omega,
                                              epsilon=1e-14,
                                              derivs=[[0, 0, 1], [0, 1, 0]])

        error_01_10 = abs(dz_01 - dz_10)
        error_02_20 = abs(dz_02 - dz_20)
        error_12_21 = abs(dz_12 - dz_21)

        self.assertLess(error_01_10, 1e-8)
        self.assertLess(error_02_20, 1e-8)
        self.assertLess(error_12_21, 1e-8)
コード例 #7
0
ファイル: test_theta.py プロジェクト: collijk/abelfunctions
    def test_third_derivatives_oscpart(self):
        w = [0.2+0.5j, 0.3-0.1j, -0.1+0.2j]
        Omega = self.Omega3

        dVec_1 = [[1,0,0],[1,0,0],[1,0,0]]
        dVec_2 = [[1,0,0],[0,1,0],[1,0,0]]
        dVec_3 = [[1,0,0],[0,0,1],[0,1,0]]
        dVec_4 = [[0,1,0],[0,0,1],[0,1,0]]
        dVec_5 = [[0,0,1],[0,0,1],[0,0,1]]
        dVec_6 = [[0,0,1],[0,1,0],[0,0,1]]
        dVec_7 = [[1,2,3.1],[2.9,-0.3,1.0],[-20,13.3,0.6684]]

        maple_1 = 88.96174663331488 + 12.83401972101860j
        maple_2 = -5.963646070489819 + 9.261504506522976j
        maple_3 = -1.347499363888600 + 0.5297607158965981j
        maple_4 = 1.217499355198950 + 0.8449102496878512j
        maple_5 = -15.58299545726265 - 0.4376346712347114j
        maple_6 = -2.441570516715710 - 0.2535384980716853j
        maple_7 = -2791.345600876934 + 1286.207313664481j

        deriv_1 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_1)
        deriv_2 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_2)
        deriv_3 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_3)
        deriv_4 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_4)
        deriv_5 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_5)
        deriv_6 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_6)
        deriv_7 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_7)
    
        error_1 = abs(deriv_1 - maple_1)
        error_2 = abs(deriv_2 - maple_2)
        error_3 = abs(deriv_3 - maple_3)
        error_4 = abs(deriv_4 - maple_4)
        error_5 = abs(deriv_5 - maple_5)
        error_6 = abs(deriv_6 - maple_6)
        error_7 = abs(deriv_7 - maple_7)

        self.assertLess(error_1, 1e-8)
        self.assertLess(error_2, 1e-8)
        self.assertLess(error_3, 1e-8)
        self.assertLess(error_4, 1e-8)
        self.assertLess(error_5, 1e-8)
        self.assertLess(error_6, 1e-8)
        self.assertLess(error_7, 1e-8)

        # Genus 4 example
        Omega = self.Omega4
        w = [-0.37704918-0.18456279j, 0.63934426+0.42591413j,
             0.54918033+0.09937996j, -0.21721311-0.07808426j]

        dVec_1 = [[1,0,0,0],[1,0,0,0],[1,0,0,0]]
        dVec_2 = [[1,0,0,0],[0,1,0,0],[0,0,1,0]]
        dVec_3 = [[1,0,0,0],[0,0,1,0],[0,0,0,1]]
        dVec_4 = [[1,0,0,0],[0,1,1,0],[1,0,0,1]]
        dVec_5 = [[0,0,1,0],[0,1,1,0],[1,0,0,1]]
        dVec_6 = [[0,0,1,0],[1,2,3,4],[1,0,0,1]]
        dVec_7 = [[3.2,-9.8,0.004,-13.9],[0,2.4,0,4],[90.1,-12.93947,-1e-4,3]]

        maple_1 = -67.14022021800414 - 50.25487358123665j
        maple_2 = 6.220027066901749 - 16.96996479658767j
        maple_3 = 14.42498231220689 + 16.30518807929409j
        maple_4 = -35.67483045211793 - 18.14139876283777j
        maple_5 = 53.25640352451774 + 18.93871689387491j
        maple_6 = -185.6760275507559 - 93.99261766419004j
        maple_7 = 239954.2751344823 + 129975.3988999572j

        deriv_1 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_1)
        deriv_2 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_2)
        deriv_3 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_3)
        deriv_4 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_4)
        deriv_5 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_5)
        deriv_6 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_6)
        deriv_7 = RiemannTheta.oscillatory_part(w, Omega, 
                epsilon=1e-14, derivs=dVec_7)

        error_1 = abs(deriv_1 - maple_1)
        error_2 = abs(deriv_2 - maple_2)
        error_3 = abs(deriv_3 - maple_3)
        error_4 = abs(deriv_4 - maple_4)
        error_5 = abs(deriv_5 - maple_5)
        error_6 = abs(deriv_6 - maple_6)
        error_7 = abs(deriv_7 - maple_7)

        self.assertLess(error_1, 1e-8)
        self.assertLess(error_2, 1e-8)
        self.assertLess(error_3, 1e-8)
        self.assertLess(error_4, 1e-8)
        self.assertLess(error_5, 1e-8)
        self.assertLess(error_6, 1e-8)
        self.assertLess(error_7, 1e-8)
コード例 #8
0
ファイル: test_theta.py プロジェクト: slel/abelfunctions
    def test_third_derivatives_oscpart(self):
        w = [0.2 + 0.5j, 0.3 - 0.1j, -0.1 + 0.2j]
        Omega = self.Omega3

        dVec_1 = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
        dVec_2 = [[1, 0, 0], [0, 1, 0], [1, 0, 0]]
        dVec_3 = [[1, 0, 0], [0, 0, 1], [0, 1, 0]]
        dVec_4 = [[0, 1, 0], [0, 0, 1], [0, 1, 0]]
        dVec_5 = [[0, 0, 1], [0, 0, 1], [0, 0, 1]]
        dVec_6 = [[0, 0, 1], [0, 1, 0], [0, 0, 1]]
        dVec_7 = [[1, 2, 3.1], [2.9, -0.3, 1.0], [-20, 13.3, 0.6684]]

        maple_1 = 88.96174663331488 + 12.83401972101860j
        maple_2 = -5.963646070489819 + 9.261504506522976j
        maple_3 = -1.347499363888600 + 0.5297607158965981j
        maple_4 = 1.217499355198950 + 0.8449102496878512j
        maple_5 = -15.58299545726265 - 0.4376346712347114j
        maple_6 = -2.441570516715710 - 0.2535384980716853j
        maple_7 = -2791.345600876934 + 1286.207313664481j

        deriv_1 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_1)
        deriv_2 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_2)
        deriv_3 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_3)
        deriv_4 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_4)
        deriv_5 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_5)
        deriv_6 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_6)
        deriv_7 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_7)

        error_1 = abs(deriv_1 - maple_1)
        error_2 = abs(deriv_2 - maple_2)
        error_3 = abs(deriv_3 - maple_3)
        error_4 = abs(deriv_4 - maple_4)
        error_5 = abs(deriv_5 - maple_5)
        error_6 = abs(deriv_6 - maple_6)
        error_7 = abs(deriv_7 - maple_7)

        self.assertLess(error_1, 1e-8)
        self.assertLess(error_2, 1e-8)
        self.assertLess(error_3, 1e-8)
        self.assertLess(error_4, 1e-8)
        self.assertLess(error_5, 1e-8)
        self.assertLess(error_6, 1e-8)
        self.assertLess(error_7, 1e-8)

        # Genus 4 example
        Omega = self.Omega4
        w = [
            -0.37704918 - 0.18456279j, 0.63934426 + 0.42591413j,
            0.54918033 + 0.09937996j, -0.21721311 - 0.07808426j
        ]

        dVec_1 = [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
        dVec_2 = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
        dVec_3 = [[1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
        dVec_4 = [[1, 0, 0, 0], [0, 1, 1, 0], [1, 0, 0, 1]]
        dVec_5 = [[0, 0, 1, 0], [0, 1, 1, 0], [1, 0, 0, 1]]
        dVec_6 = [[0, 0, 1, 0], [1, 2, 3, 4], [1, 0, 0, 1]]
        dVec_7 = [[3.2, -9.8, 0.004, -13.9], [0, 2.4, 0, 4],
                  [90.1, -12.93947, -1e-4, 3]]

        maple_1 = -67.14022021800414 - 50.25487358123665j
        maple_2 = 6.220027066901749 - 16.96996479658767j
        maple_3 = 14.42498231220689 + 16.30518807929409j
        maple_4 = -35.67483045211793 - 18.14139876283777j
        maple_5 = 53.25640352451774 + 18.93871689387491j
        maple_6 = -185.6760275507559 - 93.99261766419004j
        maple_7 = 239954.2751344823 + 129975.3988999572j

        deriv_1 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_1)
        deriv_2 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_2)
        deriv_3 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_3)
        deriv_4 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_4)
        deriv_5 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_5)
        deriv_6 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_6)
        deriv_7 = RiemannTheta.oscillatory_part(w,
                                                Omega,
                                                epsilon=1e-14,
                                                derivs=dVec_7)

        error_1 = abs(deriv_1 - maple_1)
        error_2 = abs(deriv_2 - maple_2)
        error_3 = abs(deriv_3 - maple_3)
        error_4 = abs(deriv_4 - maple_4)
        error_5 = abs(deriv_5 - maple_5)
        error_6 = abs(deriv_6 - maple_6)
        error_7 = abs(deriv_7 - maple_7)

        self.assertLess(error_1, 1e-8)
        self.assertLess(error_2, 1e-8)
        self.assertLess(error_3, 1e-8)
        self.assertLess(error_4, 1e-8)
        self.assertLess(error_5, 1e-8)
        self.assertLess(error_6, 1e-8)
        self.assertLess(error_7, 1e-8)