123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- from sympy.core.numbers import (Rational, pi)
- from sympy.core.singleton import S
- from sympy.core.symbol import Symbol
- from sympy.geometry import (Circle, Ellipse, Point, Line, Parabola,
- Polygon, Ray, RegularPolygon, Segment, Triangle, Plane, Curve)
- from sympy.geometry.entity import scale, GeometryEntity
- from sympy.testing.pytest import raises
- def test_entity():
- x = Symbol('x', real=True)
- y = Symbol('y', real=True)
- assert GeometryEntity(x, y) in GeometryEntity(x, y)
- raises(NotImplementedError, lambda: Point(0, 0) in GeometryEntity(x, y))
- assert GeometryEntity(x, y) == GeometryEntity(x, y)
- assert GeometryEntity(x, y).equals(GeometryEntity(x, y))
- c = Circle((0, 0), 5)
- assert GeometryEntity.encloses(c, Point(0, 0))
- assert GeometryEntity.encloses(c, Segment((0, 0), (1, 1)))
- assert GeometryEntity.encloses(c, Line((0, 0), (1, 1))) is False
- assert GeometryEntity.encloses(c, Circle((0, 0), 4))
- assert GeometryEntity.encloses(c, Polygon(Point(0, 0), Point(1, 0), Point(0, 1)))
- assert GeometryEntity.encloses(c, RegularPolygon(Point(8, 8), 1, 3)) is False
- def test_svg():
- a = Symbol('a')
- b = Symbol('b')
- d = Symbol('d')
- entity = Circle(Point(a, b), d)
- assert entity._repr_svg_() is None
- entity = Circle(Point(0, 0), S.Infinity)
- assert entity._repr_svg_() is None
- def test_subs():
- x = Symbol('x', real=True)
- y = Symbol('y', real=True)
- p = Point(x, 2)
- q = Point(1, 1)
- r = Point(3, 4)
- for o in [p,
- Segment(p, q),
- Ray(p, q),
- Line(p, q),
- Triangle(p, q, r),
- RegularPolygon(p, 3, 6),
- Polygon(p, q, r, Point(5, 4)),
- Circle(p, 3),
- Ellipse(p, 3, 4)]:
- assert 'y' in str(o.subs(x, y))
- assert p.subs({x: 1}) == Point(1, 2)
- assert Point(1, 2).subs(Point(1, 2), Point(3, 4)) == Point(3, 4)
- assert Point(1, 2).subs((1, 2), Point(3, 4)) == Point(3, 4)
- assert Point(1, 2).subs(Point(1, 2), Point(3, 4)) == Point(3, 4)
- assert Point(1, 2).subs({(1, 2)}) == Point(2, 2)
- raises(ValueError, lambda: Point(1, 2).subs(1))
- raises(ValueError, lambda: Point(1, 1).subs((Point(1, 1), Point(1,
- 2)), 1, 2))
- def test_transform():
- assert scale(1, 2, (3, 4)).tolist() == \
- [[1, 0, 0], [0, 2, 0], [0, -4, 1]]
- def test_reflect_entity_overrides():
- x = Symbol('x', real=True)
- y = Symbol('y', real=True)
- b = Symbol('b')
- m = Symbol('m')
- l = Line((0, b), slope=m)
- p = Point(x, y)
- r = p.reflect(l)
- c = Circle((x, y), 3)
- cr = c.reflect(l)
- assert cr == Circle(r, -3)
- assert c.area == -cr.area
- pent = RegularPolygon((1, 2), 1, 5)
- slope = S.ComplexInfinity
- while slope is S.ComplexInfinity:
- slope = Rational(*(x._random()/2).as_real_imag())
- l = Line(pent.vertices[1], slope=slope)
- rpent = pent.reflect(l)
- assert rpent.center == pent.center.reflect(l)
- rvert = [i.reflect(l) for i in pent.vertices]
- for v in rpent.vertices:
- for i in range(len(rvert)):
- ri = rvert[i]
- if ri.equals(v):
- rvert.remove(ri)
- break
- assert not rvert
- assert pent.area.equals(-rpent.area)
- 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))
|