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) )
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)')
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)')
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))
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]
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])
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))
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))
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))
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_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))
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))
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)
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))
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) )
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))