interface SVGMatrix {
[StrictTypeChecking] attribute unrestricted double a;
[StrictTypeChecking] attribute unrestricted double b;
[StrictTypeChecking] attribute unrestricted double c;
[StrictTypeChecking] attribute unrestricted double d;
[StrictTypeChecking] attribute unrestricted double e;
[StrictTypeChecking] attribute unrestricted double f;
[StrictTypeChecking] SVGMatrix multiply(SVGMatrix secondMatrix);
[RaisesException] SVGMatrix inverse();
[Immutable, StrictTypeChecking] SVGMatrix translate(unrestricted float x, unrestricted float y);
[Immutable, StrictTypeChecking] SVGMatrix scale(unrestricted float scaleFactor);
[Immutable, StrictTypeChecking] SVGMatrix scaleNonUniform(unrestricted float scaleFactorX, unrestricted float scaleFactorY);
[Immutable, StrictTypeChecking] SVGMatrix rotate(unrestricted float angle);
[StrictTypeChecking, RaisesException] SVGMatrix rotateFromVector(unrestricted float x, unrestricted float y);
[Immutable] SVGMatrix flipX();
[Immutable] SVGMatrix flipY();
[Immutable, StrictTypeChecking] SVGMatrix skewX(unrestricted float angle);
[Immutable, StrictTypeChecking] SVGMatrix skewY(unrestricted float angle);
};