def test_shear_constructor(self): shear = Affine.shear(30) assert isinstance(shear, Affine) sx = math.tan(math.radians(30)) seq_almost_equal(tuple(shear), (1,0,0, sx,1,0, 0,0,1)) shear = Affine.shear(-15, 60) sx = math.tan(math.radians(-15)) sy = math.tan(math.radians(60)) seq_almost_equal(tuple(shear), (1,sy,0, sx,1,0, 0,0,1)) shear = Affine.shear(y_angle=45) seq_almost_equal(tuple(shear), (1,1,0, 0,1,0, 0,0,1))
def test_is_conformal(self): assert Affine.identity().is_conformal assert Affine.scale(2.5, 6.1).is_conformal assert Affine.translation(4, -1).is_conformal assert Affine.rotation(90).is_conformal assert Affine.rotation(-26).is_conformal assert not Affine.shear(4, -1).is_conformal
def test_is_rectilinear(self): assert Affine.identity().is_rectilinear assert Affine.scale(2.5, 6.1).is_rectilinear assert Affine.translation(4, -1).is_rectilinear assert Affine.rotation(90).is_rectilinear assert not Affine.shear(4, -1).is_rectilinear assert not Affine.rotation(-26).is_rectilinear
def test_is_degenerate(self): assert not Affine.identity().is_degenerate assert not Affine.translation(2, -1).is_degenerate assert not Affine.shear(0, -22.5).is_degenerate assert not Affine.rotation(88.7).is_degenerate assert not Affine.scale(0.5).is_degenerate assert Affine.scale(0).is_degenerate assert Affine.scale(-10, 0).is_degenerate assert Affine.scale(0, 300).is_degenerate assert Affine.scale(0).is_degenerate assert Affine.scale(0).is_degenerate
def mkA(rot=0, scale=(1, 1), shear=0, translation=(0, 0)): return Affine.translation(*translation) * Affine.rotation( rot) * Affine.shear(shear) * Affine.scale(*scale)