Пример #1
0
    def test_incomplete(x, y, z):
        # TODO: sign of sqrt(x, y, z)
        assume(distinct(x, y, z))

        # https://dlmf.nist.gov/19.21.E7
        assert nice_and_close(
            abs(3 * elliprf(x, y, z) - ((x - y) * elliprd(y, z, x) +
                                        (z - y) * elliprd(x, y, z))),
            abs(3 * (y / x / z)**0.5))

        # https://dlmf.nist.gov/19.21.E8
        assert nice_and_close(
            abs(elliprd(y, z, x) + elliprd(z, x, y) + elliprd(x, y, z)),
            abs(3 * (x * y * z)**(-0.5)))

        # https://dlmf.nist.gov/19.21.E9
        assert nice_and_close(
            x * elliprd(y, z, x) + y * elliprd(z, x, y) + z * elliprd(x, y, z),
            3 * elliprf(x, y, z))

        # https://dlmf.nist.gov/19.21.E10
        assert nice_and_close(
            abs(2 * elliprg(x, y, z) - (z * elliprf(x, y, z) - (x - z) *
                                        (y - z) * elliprd(x, y, z) / 3)),
            abs((x * y / z)**0.5))

        # https://dlmf.nist.gov/19.21.E11
        assert nice_and_close(
            6 * elliprg(x, y, z), 3 * (x + y + z) * elliprf(x, y, z) -
            sum(_x**2 * elliprd(_y, _z, _x)
                for _x, _y, _z in circular_shifts((x, y, z))))
        assert nice_and_close(
            6 * elliprg(x, y, z),
            sum(_x * (_y + _z) * elliprd(_y, _z, _x)
                for _x, _y, _z in circular_shifts((x, y, z))))
Пример #2
0
    def test_complete_3(y, z, p):
        # https://dlmf.nist.gov/19.21.E6
        assume(distinct(y, z, p))
        if z < y < p or p < y < z:
            y, z = z, y

        r = (y - p) / (y - z)
        assume(r > 0)

        assert nice_and_close(
            (r * p)**0.5 / z * elliprj(0, y, z, p),
            (r - 1) * elliprf(0, y, z) * elliprd(p, r * z, z) +
            elliprd(0, y, z) * elliprf(p, r * z, z))
Пример #3
0
    def test_elliprj(x, y, z, p):
        # TODO: properly analytically continue
        assume(distinct(x, y, z, p))

        # https://dlmf.nist.gov/19.21.E13
        q = (y - x) * (z - x) / (p - x) + x

        # # https://dlmf.nist.gov/19.21.E12
        # TODO: elliprc sign issue
        assert nice_and_close(
            ((p - x) * elliprj(x, y, z, p) +
             (q - x) * elliprj(x, y, z, q)).real,
            (3 * (elliprf(x, y, z) - elliprc(y * z / x, p * q / x))).real)

        # https://dlmf.nist.gov/19.21.E15
        # special case of above with x=0
        q = y * z / p
        assert nice_and_close(
            (p * elliprj(0, y, z, p) + q * elliprj(0, y, z, q)).real,
            3 * elliprf(0, y, z).real)
Пример #4
0
    def test_elliprj(x, y, z, p, l):
        assert nice_and_close(elliprj(x, x, x, x), x**(-1.5))
        assert nice_and_close(elliprj(l * x, l * y, l * z, l * p),
                              elliprj(x, y, z, p) / l**1.5)
        assert nice_and_close(elliprj(x, y, z, z), elliprd(x, y, z))
        assert isinf(elliprj(0, 0, z, p))
        assert nice_and_close(elliprj(x, x, x, p), elliprd(p, p, x))
        assert nice_and_close(
            elliprj(x, x, x, p).real,
            3 * (elliprc(x, p) - x**(-0.5)) / (x - p))
        assert nice_and_close(elliprj(x, y, y, y), elliprd(x, y, y))
        # assert nice_and_close(elliprj(0, y, z, (y*z)**0.5), 1.5/(y*z)**0.5 * elliprf(0, y, z))
        # assert nice_and_close(elliprj(0, y, z, -(y*z)**0.5), -1.5/(y*z)**0.5 * elliprf(0, y, z))

        # TODO:  elliprc sign issue
        assume(distinct(x, y, z))
        p = x + ((y - x) * (z - x))**0.5
        assert nice_and_close(
            (p - x) * elliprj(x, y, z, p),
            1.5 * (elliprf(x, y, z) - x**0.5 * elliprc(y * z, p**2)))
Пример #5
0
 def test_elliprj2(y, p):
     assume(distinct(y, p) and y != 0)
     assert nice_and_close(
         elliprj(0, y, y, -p).real, -1.5 * pi / y**0.5 / (y + p))
Пример #6
0
 def test_elliprj1(x, y, p):
     assume(distinct(y, p))
     assert nice_and_close(elliprj(0, y, y, p),
                           1.5 * pi / (y * p**0.5 + p * y**0.5))
     assert nice_and_close(elliprj(x, y, y, p),
                           3 * (elliprc(x, y) - elliprc(x, p)) / (p - y))
Пример #7
0
 def test_stress(self, m, args, z1, z2):
     assume(distinct(*args, d_min=SMALL))
     assume(abs(z1-z2) >= SMALL)
     self._test(args, m, z1, z2, rtol=1e-2, atol=1e-2)