def test_line_derivative(self): # using AlmostEqual for floating point error gamma = ComplexLine(0, 1) self.assertAlmostEqual(gamma.derivative(0), 1) self.assertAlmostEqual(gamma.derivative(0.5), 1) self.assertAlmostEqual(gamma.derivative(0.75), 1) self.assertAlmostEqual(gamma.derivative(0), 1) gamma = ComplexLine(-1.j, 1.j) self.assertAlmostEqual(gamma.derivative(0), 2.j) self.assertAlmostEqual(gamma.derivative(0.5), 2.j) self.assertAlmostEqual(gamma.derivative(0.75), 2.j) self.assertAlmostEqual(gamma.derivative(1), 2.j)
def test_simple_composite(self): gammax1 = ComplexLine(4, 1) gamma1 = RiemannSurfacePathSmale(self.X1, gammax1, [-2, 2]) gammax2 = ComplexArc(1, 0, 0, pi) gamma2 = RiemannSurfacePathSmale(self.X1, gammax2, [-1, 1]) gamma = gamma1 + gamma2 nu = lambda x, y: y nu_gamma = gamma.parameterize(nu) val = nu_gamma(0.0) test = gammax1.derivative(0.0) * (-2) self.assertAlmostEqual(val, test) val = nu_gamma(0.25) test = gammax1.derivative(0.5) * (-sqrt(2.5)) self.assertAlmostEqual(val, test) eps = 1e-12 val = nu_gamma(0.5 - eps) test = gammax1.derivative(1.0 - eps / 2) * (-1) self.assertAlmostEqual(val, test) val = nu_gamma(0.5) test = gammax2.derivative(0.0) * (-1) self.assertAlmostEqual(val, test) val = nu_gamma(0.5 + eps) test = gammax2.derivative(eps / 2) * (-1) self.assertAlmostEqual(val, test) val = nu_gamma(0.75) test = gammax2.derivative(0.5) * (-sqrt(1.j)) self.assertAlmostEqual(val, test) val = nu_gamma(1.0) test = gammax2.derivative(1.0) * (-1.j) self.assertAlmostEqual(val, test)
def test_simple_composite(self): gammax1 = ComplexLine(4,1) gamma1 = RiemannSurfacePathSmale(self.X1, gammax1, [-2,2]) gammax2 = ComplexArc(1,0,0,pi) gamma2 = RiemannSurfacePathSmale(self.X1, gammax2, [-1,1]) gamma = gamma1 + gamma2 nu = lambda x,y: y nu_gamma = gamma.parameterize(nu) val = nu_gamma(0.0) test = gammax1.derivative(0.0)*(-2) self.assertAlmostEqual(val, test) val = nu_gamma(0.25) test = gammax1.derivative(0.5)*(-sqrt(2.5)) self.assertAlmostEqual(val, test) eps = 1e-12 val = nu_gamma(0.5-eps) test = gammax1.derivative(1.0-eps/2)*(-1) self.assertAlmostEqual(val, test) val = nu_gamma(0.5) test = gammax2.derivative(0.0)*(-1) self.assertAlmostEqual(val, test) val = nu_gamma(0.5+eps) test = gammax2.derivative(eps/2)*(-1) self.assertAlmostEqual(val, test) val = nu_gamma(0.75) test = gammax2.derivative(0.5)*(-sqrt(1.j)) self.assertAlmostEqual(val, test) val = nu_gamma(1.0) test = gammax2.derivative(1.0)*(-1.j) self.assertAlmostEqual(val, test)