sig
  type transform_op =
      Scale of (float * float) * float * float
    | Rotate of (float * float) * float
    | Translate of float * float
    | ShearX of (float * float) * float
    | ShearY of (float * float) * float
  type transform = Pdftransform.transform_op list
  type transform_matrix = {
    a : float;
    b : float;
    c : float;
    d : float;
    e : float;
    f : float;
  }
  val i : Pdftransform.transform
  val string_of_transform : Pdftransform.transform -> string
  val i_matrix : Pdftransform.transform_matrix
  val string_of_matrix : Pdftransform.transform_matrix -> string
  val mktranslate : float -> float -> Pdftransform.transform_matrix
  val mkscale :
    float * float -> float -> float -> Pdftransform.transform_matrix
  val mkrotate : float * float -> float -> Pdftransform.transform_matrix
  val mkshearx : float * float -> float -> Pdftransform.transform_matrix
  val mksheary : float * float -> float -> Pdftransform.transform_matrix
  val compose :
    Pdftransform.transform_op ->
    Pdftransform.transform -> Pdftransform.transform
  val append :
    Pdftransform.transform ->
    Pdftransform.transform -> Pdftransform.transform
  val matrix_compose :
    Pdftransform.transform_matrix ->
    Pdftransform.transform_matrix -> Pdftransform.transform_matrix
  val matrix_of_op :
    Pdftransform.transform_op -> Pdftransform.transform_matrix
  val matrix_of_transform :
    Pdftransform.transform -> Pdftransform.transform_matrix
  exception NonInvertable
  val matrix_invert :
    Pdftransform.transform_matrix -> Pdftransform.transform_matrix
  val transform : Pdftransform.transform -> float * float -> float * float
  val transform_matrix :
    Pdftransform.transform_matrix -> float * float -> float * float
  val decompose :
    Pdftransform.transform_matrix ->
    float * float * float * float * float * float
  val recompose :
    float ->
    float ->
    float -> float -> float -> float -> Pdftransform.transform_matrix
end