def __mul__(self, other):
sa, sb, sc, sd, se, sf, _, _, _ = self<EOL>if isinstance(other, Affine):<EOL><INDENT>oa, ob, oc, od, oe, of, _, _, _ = other<EOL>return tuple.__new__(<EOL>Affine,<EOL>(<EOL>sa * oa + sb * od,<EOL>sa * ob + sb * oe,<EOL>sa * oc + sb * of + sc,<EOL>sd * oa + se * od,<EOL>sd * ob + se * oe,<EOL>sd * oc + se * of + sf,<EOL><NUM_LIT:0.0>,<EOL><NUM_LIT:0.0>,<EOL><NUM_LIT:1.0>,<EOL>),<EOL>)<EOL><DEDENT>else:<EOL><INDENT>try:<EOL><INDENT>vx, vy = other<EOL><DEDENT>except Exception:<EOL><INDENT>return NotImplemented<EOL><DEDENT>return vx * sa + vy * sd + sc, vx * sb + vy * se + sf<EOL><DEDENT>
Apply the transform using matrix multiplication, creating a
        resulting object of the same type.  A transform may be applied to
        another transform, a vector, vector array, or shape.

        :param other: The object to transform.
        :type other: Affine, :class:`~planar.Vec2`,
            :class:`~planar.Vec2Array`, :class:`~planar.Shape`
        :rtype: Same as ``other``