sig
  type t = private { matrix : bool array array; height : int; width : int; }
  val create : bool array array -> Tiling.Pattern.t
  val apply : D4.t -> Tiling.Pattern.t -> Tiling.Pattern.t
  val resize : Tiling.Pattern.t -> w:int -> h:int -> Tiling.Pattern.t
  val crop :
    Tiling.Pattern.t -> x:int -> y:int -> w:int -> h:int -> Tiling.Pattern.t
  val shift : Tiling.Pattern.t -> ofsx:int -> ofsy:int -> Tiling.Pattern.t
  val union : Tiling.Pattern.t -> Tiling.Pattern.t -> Tiling.Pattern.t
  val inter : Tiling.Pattern.t -> Tiling.Pattern.t -> Tiling.Pattern.t
  val diff : Tiling.Pattern.t -> Tiling.Pattern.t -> Tiling.Pattern.t
  val xor : Tiling.Pattern.t -> Tiling.Pattern.t -> Tiling.Pattern.t
  val has_iso : D4.t -> Tiling.Pattern.t -> bool
  val print : Format.formatter -> Tiling.Pattern.t -> unit
end