Beispiel #1
0
def test_geometry_transforms():
    from sympy import Tuple

    c = Curve((x, x ** 2), (x, 0, 1))
    pts = [Point(0, 0), Point(S(1) / 2, S(1) / 4), Point(1, 1)]
    cout = Curve((2 * x - 4, 3 * x ** 2 - 10), (x, 0, 1))
    pts_out = [Point(-4, -10), Point(-3, -S(37) / 4), Point(-2, -7)]
    assert c.scale(2, 3, (4, 5)) == cout
    assert [c.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts
    assert [cout.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts_out
    assert Triangle(*pts).scale(2, 3, (4, 5)) == Triangle(*pts_out)

    assert Ellipse((0, 0), 2, 3).scale(2, 3, (4, 5)) == Ellipse(Point(-4, -10), 4, 9)
    assert Circle((0, 0), 2).scale(2, 3, (4, 5)) == Ellipse(Point(-4, -10), 4, 6)
    assert Ellipse((0, 0), 2, 3).scale(3, 3, (4, 5)) == Ellipse(Point(-8, -10), 6, 9)
    assert Circle((0, 0), 2).scale(3, 3, (4, 5)) == Circle(Point(-8, -10), 6)
    assert Circle(Point(-8, -10), 6).scale(S(1) / 3, S(1) / 3, (4, 5)) == Circle((0, 0), 2)
    assert Curve((x + y, 3 * x), (x, 0, 1)).subs(y, S.Half) == Curve((x + S(1) / 2, 3 * x), (x, 0, 1))
    assert Curve((x, 3 * x), (x, 0, 1)).translate(4, 5) == Curve((x + 4, 3 * x + 5), (x, 0, 1))
    assert Circle((0, 0), 2).translate(4, 5) == Circle((4, 5), 2)
    assert Circle((0, 0), 2).scale(3, 3) == Circle((0, 0), 6)
    assert Point(1, 1).scale(2, 3, (4, 5)) == Point(-2, -7)
    assert Point(1, 1).translate(4, 5) == Point(5, 6)
    assert scale(1, 2, (3, 4)).tolist() == [[1, 0, 0], [0, 2, 0], [0, -4, 1]]
    assert RegularPolygon((0, 0), 1, 4).scale(2, 3, (4, 5)) == Polygon(
        Point(-2, -10), Point(-4, -7), Point(-6, -10), Point(-4, -13)
    )
Beispiel #2
0
def test_curve():
    s = Symbol('s')
    z = Symbol('z')

    # this curve is independent of the indicated parameter
    C = Curve([2 * s, s**2], (z, 0, 2))

    assert C.parameter == z
    assert C.functions == (2 * s, s**2)
    assert C.arbitrary_point() == Point(2 * s, s**2)
    assert C.arbitrary_point(z) == Point(2 * s, s**2)

    # this is how it is normally used
    C = Curve([2 * s, s**2], (s, 0, 2))

    assert C.parameter == s
    assert C.functions == (2 * s, s**2)
    t = Symbol('t')
    assert C.arbitrary_point() != Point(2 * t, t**
                                        2)  # the t returned as assumptions
    t = Symbol('t',
               real=True)  # now t has the same assumptions so the test passes
    assert C.arbitrary_point() == Point(2 * t, t**2)
    assert C.arbitrary_point(z) == Point(2 * z, z**2)
    assert C.arbitrary_point(C.parameter) == Point(2 * s, s**2)

    raises(ValueError, 'Curve((s, s + t), (s, 1, 2)).arbitrary_point()')
    raises(ValueError, 'Curve((s, s + t), (t, 1, 2)).arbitrary_point(s)')
Beispiel #3
0
def test_length():
    t = Symbol("t", real=True)

    c1 = Curve((t, 0), (t, 0, 1))
    assert c1.length == 1

    c2 = Curve((t, t), (t, 0, 1))
    assert c2.length == sqrt(2)

    c3 = Curve((t ** 2, t), (t, 2, 5))
    assert c3.length == -sqrt(17) - asinh(4) / 4 + asinh(10) / 4 + 5 * sqrt(101) / 2
def test_curve():
    s = Symbol('s')
    z = Symbol('z')

    # this curve is independent of the indicated parameter
    c = Curve([2*s, s**2], (z, 0, 2))

    assert c.parameter == z
    assert c.functions == (2*s, s**2)
    assert c.arbitrary_point() == Point(2*s, s**2)
    assert c.arbitrary_point(z) == Point(2*s, s**2)

    # this is how it is normally used
    c = Curve([2*s, s**2], (s, 0, 2))

    assert c.parameter == s
    assert c.functions == (2*s, s**2)
    t = Symbol('t')
    assert c.arbitrary_point() != Point(2*t, t**2) # the t returned as assumptions
    t = Symbol('t', real=True) # now t has the same assumptions so the test passes
    assert c.arbitrary_point() == Point(2*t, t**2)
    assert c.arbitrary_point(z) == Point(2*z, z**2)
    assert c.arbitrary_point(c.parameter) == Point(2*s, s**2)

    raises(ValueError, 'Curve((s, s + t), (s, 1, 2)).arbitrary_point()')
    raises(ValueError, 'Curve((s, s + t), (t, 1, 2)).arbitrary_point(s)')
Beispiel #5
0
def test_transform():
    x = Symbol('x', real=True)
    y = Symbol('y', real=True)
    c = Curve((x, x**2), (x, 0, 1))
    cout = Curve((2*x - 4, 3*x**2 - 10), (x, 0, 1))
    pts = [Point(0, 0), Point(1/2, 1/4), Point(1, 1)]
    pts_out = [Point(-4, -10), Point(-3, -37/4), Point(-2, -7)]

    assert c.scale(2, 3, (4, 5)) == cout
    assert [c.subs(x, xi/2) for xi in Tuple(0, 1, 2)] == pts
    assert [cout.subs(x, xi/2) for xi in Tuple(0, 1, 2)] == pts_out
    assert Curve((x + y, 3*x), (x, 0, 1)).subs(y, S.Half) == \
        Curve((x + 1/2, 3*x), (x, 0, 1))
    assert Curve((x, 3*x), (x, 0, 1)).translate(4, 5) == \
        Curve((x + 4, 3*x + 5), (x, 0, 1))
def test_parametric_region_list():

    point = Point(-5, 12)
    assert parametric_region_list(point) == [ParametricRegion((-5, 12))]

    e = Ellipse(Point(2, 8), 2, 6)
    assert parametric_region_list(e, t) == [ParametricRegion((2*cos(t) + 2, 6*sin(t) + 8), (t, 0, 2*pi))]

    c = Curve((t, t**3), (t, 5, 3))
    assert parametric_region_list(c) == [ParametricRegion((t, t**3), (t, 5, 3))]

    s = Segment(Point(2, 11, -6), Point(0, 2, 5))
    assert parametric_region_list(s, t) == [ParametricRegion((2 - 2*t, 11 - 9*t, 11*t - 6), (t, 0, 1))]
    s1 = Segment(Point(0, 0), (1, 0))
    assert parametric_region_list(s1, t) == [ParametricRegion((t, 0), (t, 0, 1))]
    s2 = Segment(Point(1, 2, 3), Point(1, 2, 5))
    assert parametric_region_list(s2, t) == [ParametricRegion((1, 2, 2*t + 3), (t, 0, 1))]
    s3 = Segment(Point(12, 56), Point(12, 56))
    assert parametric_region_list(s3) == [ParametricRegion((12, 56))]

    poly = Polygon((1,3), (-3, 8), (2, 4))
    assert parametric_region_list(poly, t) == [ParametricRegion((1 - 4*t, 5*t + 3), (t, 0, 1)), ParametricRegion((5*t - 3, 8 - 4*t), (t, 0, 1)), ParametricRegion((2 - t, 4 - t), (t, 0, 1))]

    p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7,8)))
    raises(ValueError, lambda: parametric_region_list(p1))
Beispiel #7
0
def test_curve():
    t = Symbol('t')
    z = Symbol('z')
    C = Curve([2 * t, t**2], (z, 0, 2))

    assert C.parameter == z
    assert C.functions == [2 * t, t**2]
Beispiel #8
0
def test_free_symbols():
    a, b, c, d, e, f, s = symbols('a:f,s')
    assert Point(a,b).free_symbols == set([a, b])
    assert Line((a,b),(c,d)).free_symbols == set([a, b, c, d])
    assert Ray((a,b),(c,d)).free_symbols == set([a, b, c, d])
    assert Ray((a,b),angle=c).free_symbols == set([a, b, c])
    assert Segment((a,b),(c,d)).free_symbols == set([a, b, c, d])
    assert Line((a,b),slope=c).free_symbols == set([a, b, c])
    assert Curve((a*s,b*s),(s,c,d)).free_symbols == set([a, b, c, d])
    assert Ellipse((a,b),c,d).free_symbols == set([a, b, c, d])
    assert Ellipse((a,b),c, eccentricity=d).free_symbols == set([a, b, c, d])
    assert Ellipse((a,b),vradius=c, eccentricity=d).free_symbols == set([a, b, c, d])
    assert Circle((a,b),c).free_symbols == set([a, b, c])
    assert Circle((a,b),(c,d),(e,f)).free_symbols == set([e, d, c, b, f, a])
    assert Polygon((a,b),(c,d),(e,f)).free_symbols == set([e, b, d, f, a, c])
    assert RegularPolygon((a,b),c,d,e).free_symbols == set([e, a, b, c, d])
Beispiel #9
0
def test_geometry_EvalfMixin():
    x = pi
    t = Symbol('t')
    for g in [
            Point(x, x),
            Plane(Point(0, x, 0), (0, 0, x)),
            Curve((x * t, x), (t, 0, x)),
            Ellipse((x, x), x, -x),
            Circle((x, x), x),
            Line((0, x), (x, 0)),
            Segment((0, x), (x, 0)),
            Ray((0, x), (x, 0)),
            Parabola((0, x), Line((-x, 0), (x, 0))),
            Polygon((0, 0), (0, x), (x, 0), (x, x)),
            RegularPolygon((0, x), x, 4, x),
            Triangle((0, 0), (x, 0), (x, x)),
    ]:
        assert str(g).replace('pi', '3.1') == str(g.n(2))
Beispiel #10
0
def test_vector_integrate():
    halfdisc = ParametricRegion((r * cos(theta), r * sin(theta)), (r, -2, 2),
                                (theta, 0, pi))
    assert vector_integrate(C.x**2, halfdisc) == 4 * pi
    vector_integrate(C.x, ParametricRegion(
        (t, t**2), (t, 2, 3))) == -17 * sqrt(17) / 12 + 37 * sqrt(37) / 12

    assert vector_integrate(C.y**3 * C.z, (C.x, 0, 3),
                            (C.y, -1, 4)) == 765 * C.z / 4

    s1 = Segment(Point(0, 0), Point(0, 1))
    assert vector_integrate(-15 * C.y, s1) == S(-15) / 2
    s2 = Segment(Point(4, 3, 9), Point(1, 1, 7))
    assert vector_integrate(C.y * C.i, s2) == -6

    curve = Curve((sin(t), cos(t)), (t, 0, 2))
    assert vector_integrate(5 * C.z, curve) == 10 * C.z

    c1 = Circle(Point(2, 3), 6)
    assert vector_integrate(C.x * C.y, c1) == 72 * pi
    c2 = Circle(Point(0, 0), Point(1, 1), Point(1, 0))
    assert vector_integrate(1, c2) == c2.circumference

    triangle = Polygon((0, 0), (1, 0), (1, 1))
    assert vector_integrate(C.x * C.i - 14 * C.y * C.j, triangle) == 0
    p1, p2, p3, p4 = [(0, 0), (1, 0), (5, 1), (0, 1)]
    poly = Polygon(p1, p2, p3, p4)
    assert vector_integrate(-23 * C.z,
                            poly) == -161 * C.z - 23 * sqrt(17) * C.z

    point = Point(2, 3)
    assert vector_integrate(C.i * C.y - C.z, point) == ParametricIntegral(
        C.y * C.i, ParametricRegion((2, 3)))

    c3 = ImplicitRegion((x, y), x**2 + y**2 - 4)
    assert vector_integrate(45, c3) == 360 * pi
    c4 = ImplicitRegion((x, y), (x - 3)**2 + (y - 4)**2 - 9)
    assert vector_integrate(1, c4) == 12 * pi

    pl = Plane(Point(1, 1, 1), Point(2, 3, 4), Point(2, 2, 2))
    raises(ValueError, lambda: vector_integrate(C.x * C.z * C.i + C.k, pl))
Beispiel #11
0
def test_curve():
    s = Symbol("s")
    z = Symbol("z")

    # this curve is independent of the indicated parameter
    c = Curve([2 * s, s ** 2], (z, 0, 2))

    assert c.parameter == z
    assert c.functions == (2 * s, s ** 2)
    assert c.arbitrary_point() == Point(2 * s, s ** 2)
    assert c.arbitrary_point(z) == Point(2 * s, s ** 2)

    # this is how it is normally used
    c = Curve([2 * s, s ** 2], (s, 0, 2))

    assert c.parameter == s
    assert c.functions == (2 * s, s ** 2)
    t = Symbol("t")
    assert c.arbitrary_point() != Point(2 * t, t ** 2)  # the t returned as assumptions
    t = Symbol("t", real=True)  # now t has the same assumptions so the test passes
    assert c.arbitrary_point() == Point(2 * t, t ** 2)
    assert c.arbitrary_point(z) == Point(2 * z, z ** 2)
    assert c.arbitrary_point(c.parameter) == Point(2 * s, s ** 2)
    assert c.arbitrary_point(None) == Point(2 * s, s ** 2)
    assert c.plot_interval() == [t, 0, 2]
    assert c.plot_interval(z) == [z, 0, 2]

    assert (
        Curve([x, x], (x, 0, 1)).rotate(pi / 2, (1, 2)).scale(2, 3).translate(1, 3).arbitrary_point(s)
        == Line((0, 0), (1, 1)).rotate(pi / 2, (1, 2)).scale(2, 3).translate(1, 3).arbitrary_point(s)
        == Point(-2 * s + 7, 3 * s + 6)
    )

    raises(ValueError, lambda: Curve((s), (s, 1, 2)))
    raises(ValueError, lambda: Curve((x, x * 2), (1, x)))

    raises(ValueError, lambda: Curve((s, s + t), (s, 1, 2)).arbitrary_point())
    raises(ValueError, lambda: Curve((s, s + t), (t, 1, 2)).arbitrary_point(s))
Beispiel #12
0
def test_transform():
    x = Symbol('x', real=True)
    y = Symbol('y', real=True)
    c = Curve((x, x**2), (x, 0, 1))
    cout = Curve((2 * x - 4, 3 * x**2 - 10), (x, 0, 1))
    pts = [Point(0, 0), Point(1 / 2, 1 / 4), Point(1, 1)]
    pts_out = [Point(-4, -10), Point(-3, -37 / 4), Point(-2, -7)]

    assert c.scale(2, 3, (4, 5)) == cout
    assert [c.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts
    assert [cout.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts_out
    assert Curve((x + y, 3*x), (x, 0, 1)).subs(y, S.Half) == \
        Curve((x + 1/2, 3*x), (x, 0, 1))
    assert Curve((x, 3*x), (x, 0, 1)).translate(4, 5) == \
        Curve((x + 4, 3*x + 5), (x, 0, 1))
Beispiel #13
0
def test_curve():
    x = Symbol('x', real=True)
    s = Symbol('s')
    z = Symbol('z')

    # this curve is independent of the indicated parameter
    c = Curve([2 * s, s**2], (z, 0, 2))

    assert c.parameter == z
    assert c.functions == (2 * s, s**2)
    assert c.arbitrary_point() == Point(2 * s, s**2)
    assert c.arbitrary_point(z) == Point(2 * s, s**2)

    # this is how it is normally used
    c = Curve([2 * s, s**2], (s, 0, 2))

    assert c.parameter == s
    assert c.functions == (2 * s, s**2)
    t = Symbol('t')
    # the t returned as assumptions
    assert c.arbitrary_point() != Point(2 * t, t**2)
    t = Symbol('t', real=True)
    # now t has the same assumptions so the test passes
    assert c.arbitrary_point() == Point(2 * t, t**2)
    assert c.arbitrary_point(z) == Point(2 * z, z**2)
    assert c.arbitrary_point(c.parameter) == Point(2 * s, s**2)
    assert c.arbitrary_point(None) == Point(2 * s, s**2)
    assert c.plot_interval() == [t, 0, 2]
    assert c.plot_interval(z) == [z, 0, 2]

    assert Curve([x, x], (x, 0, 1)).rotate(pi/2, (1, 2)).scale(2, 3).translate(
        1, 3).arbitrary_point(s) == \
        Line((0, 0), (1, 1)).rotate(pi/2, (1, 2)).scale(2, 3).translate(
            1, 3).arbitrary_point(s) == \
        Point(-2*s + 7, 3*s + 6)

    raises(ValueError, lambda: Curve((s), (s, 1, 2)))
    raises(ValueError, lambda: Curve((x, x * 2), (1, x)))

    raises(ValueError, lambda: Curve((s, s + t), (s, 1, 2)).arbitrary_point())
    raises(ValueError, lambda: Curve((s, s + t), (t, 1, 2)).arbitrary_point(s))
Beispiel #14
0
def test_parameter_value():
    t = Symbol('t')
    C = Curve([2 * t, t**2], (t, 0, 2))
    assert C.parameter_value((2, 1), t) == {t: 1}
    raises(ValueError, lambda: C.parameter_value((2, 0), t))
Beispiel #15
0
def test_issue_17997():
    t, s = symbols("t s")
    c = Curve((t, t ** 2), (t, 0, 10))
    p = Curve([2 * s, s ** 2], (s, 0, 2))
    assert c(2) == Point(2, 4)
    assert p(1) == Point(2, 1)
Beispiel #16
0
def test_geometry_transforms():
    from sympy import Tuple
    c = Curve((x, x**2), (x, 0, 1))
    pts = [Point(0, 0), Point(S(1) / 2, S(1) / 4), Point(1, 1)]
    cout = Curve((2 * x - 4, 3 * x**2 - 10), (x, 0, 1))
    pts_out = [Point(-4, -10), Point(-3, -S(37) / 4), Point(-2, -7)]
    assert c.scale(2, 3, (4, 5)) == cout
    assert [c.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts
    assert [cout.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts_out
    assert Triangle(*pts).scale(2, 3, (4, 5)) == Triangle(*pts_out)

    assert Ellipse((0, 0), 2, 3).scale(2, 3, (4, 5)) == \
        Ellipse(Point(-4, -10), 4, 9)
    assert Circle((0, 0), 2).scale(2, 3, (4, 5)) == \
        Ellipse(Point(-4, -10), 4, 6)
    assert Ellipse((0, 0), 2, 3).scale(3, 3, (4, 5)) == \
        Ellipse(Point(-8, -10), 6, 9)
    assert Circle((0, 0), 2).scale(3, 3, (4, 5)) == \
        Circle(Point(-8, -10), 6)
    assert Circle(Point(-8, -10), 6).scale(S(1)/3, S(1)/3, (4, 5)) == \
        Circle((0, 0), 2)
    assert Curve((x + y, 3*x), (x, 0, 1)).subs(y, S.Half) == \
        Curve((x + S(1)/2, 3*x), (x, 0, 1))
    assert Curve((x, 3*x), (x, 0, 1)).translate(4, 5) == \
        Curve((x + 4, 3*x + 5), (x, 0, 1))
    assert Circle((0, 0), 2).translate(4, 5) == \
        Circle((4, 5), 2)
    assert Circle((0, 0), 2).scale(3, 3) == \
        Circle((0, 0), 6)
    assert Point(1, 1).scale(2, 3, (4, 5)) == \
        Point(-2, -7)
    assert Point(1, 1).translate(4, 5) == \
        Point(5, 6)
    assert scale(1, 2, (3, 4)).tolist() == \
        [[1, 0, 0], [0, 2, 0], [0, -4, 1]]
    assert RegularPolygon((0, 0), 1, 4).scale(2, 3, (4, 5)) == \
        Polygon(Point(-2, -10), Point(-4, -7), Point(-6, -10), Point(-4, -13))
Beispiel #17
0
def test_transform():
    x = Symbol("x", real=True)
    y = Symbol("y", real=True)
    c = Curve((x, x ** 2), (x, 0, 1))
    cout = Curve((2 * x - 4, 3 * x ** 2 - 10), (x, 0, 1))
    pts = [Point(0, 0), Point(S.Half, Rational(1, 4)), Point(1, 1)]
    pts_out = [Point(-4, -10), Point(-3, Rational(-37, 4)), Point(-2, -7)]

    assert c.scale(2, 3, (4, 5)) == cout
    assert [c.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts
    assert [cout.subs(x, xi / 2) for xi in Tuple(0, 1, 2)] == pts_out
    assert Curve((x + y, 3 * x), (x, 0, 1)).subs(y, S.Half) == Curve(
        (x + S.Half, 3 * x), (x, 0, 1)
    )
    assert Curve((x, 3 * x), (x, 0, 1)).translate(4, 5) == Curve(
        (x + 4, 3 * x + 5), (x, 0, 1)
    )
Beispiel #18
0
def test_parameter_value():
    t = Symbol('t')
    C = Curve([2*t, t**2], (t, 0, 2))
    assert C.parameter_value((2, 1), t) == {t: 1}
    raises(ValueError, lambda: C.parameter_value((2, 0), t))