from numpy import pi from numpy.testing import assert_equal, assert_allclose from ..shapes import Arc, Ellipse def test_shape_mirror() -> None: e = Ellipse(radii=(10, 5), offset=(10, 20), rotation=pi / 4) e.mirror(0) assert_equal(e.offset, [10, 20]) assert_allclose(e.rotation, 3 * pi / 4, atol=1e-10) a = Arc(radii=(10, 10), angles=(0, pi / 4), width=2, offset=(10, 20)) a.mirror(0) assert_equal(a.offset, [10, 20]) assert_allclose(a.angles, [0, -pi / 4], atol=1e-10) a = Arc(radii=(10, 5), angles=(0, pi / 4), width=2, angle_ref=Arc.AngleRef.FocusPos) a.mirror(1) assert a.angle_ref == Arc.AngleRef.FocusNeg a = Arc(radii=(5, 10), angles=(0, pi / 4), width=2, angle_ref=Arc.AngleRef.FocusPos) a.mirror(0) assert a.angle_ref == Arc.AngleRef.FocusNeg def test_shape_flip_across() -> None: e = Ellipse(radii=(10, 5), offset=(10, 20), rotation=pi / 4) e.flip_across(axis=0) assert_equal(e.offset, [10, -20]) assert_allclose(e.rotation, 3 * pi / 4, atol=1e-10) e = Ellipse(radii=(10, 5), offset=(10, 20)) e.flip_across(y=10) assert_equal(e.offset, [10, 0]) def test_shape_scale() -> None: e = Ellipse(radii=(10, 5)) e.scale_by(2) assert_equal(e.radii, [20, 10]) a = Arc(radii=(10, 5), angles=(0, pi), width=2) a.scale_by(0.5) assert_equal(a.radii, [5, 2.5]) assert a.width == 1