sig
  type t
  type coord_name = [ `Data | `Device | `Graph | `Orthonormal ]
  val get_coord_from_name :
    Archimedes.Viewport.t ->
    Archimedes.Viewport.coord_name -> Archimedes.Coordinate.t
  val make :
    Archimedes.Viewport.t ->
    ?lines:float ->
    ?text:float ->
    ?marks:float ->
    ?redim:(Archimedes.Viewport.t -> float -> float -> unit) ->
    ?coord:[ `Device | `Graph | `Orthonormal ] ->
    float -> float -> float -> float -> Archimedes.Viewport.t
  val show : Archimedes.Viewport.t -> unit
  val get_backend : Archimedes.Viewport.t -> Archimedes.Backend.t
  val desync_ratio : Archimedes.Viewport.t -> unit
  val sync_ratio : Archimedes.Viewport.t -> Archimedes.Viewport.t -> unit
  val desync_range : ?x:bool -> ?y:bool -> Archimedes.Viewport.t -> unit
  val sync_range :
    ?x:bool ->
    ?y:bool -> Archimedes.Viewport.t -> Archimedes.Viewport.t -> unit
  val desync_unit_size : ?x:bool -> ?y:bool -> Archimedes.Viewport.t -> unit
  val sync_unit_size :
    ?x:bool ->
    ?y:bool -> Archimedes.Viewport.t -> Archimedes.Viewport.t -> unit
  val sync :
    ?x:bool ->
    ?y:bool -> Archimedes.Viewport.t -> Archimedes.Viewport.t -> unit
  val grid :
    ?syncs:bool * bool * bool * bool ->
    Archimedes.Viewport.t -> int -> int -> Archimedes.Viewport.t array array
  val rows :
    ?syncs:bool * bool ->
    Archimedes.Viewport.t -> int -> Archimedes.Viewport.t array
  val columns :
    ?syncs:bool * bool ->
    Archimedes.Viewport.t -> int -> Archimedes.Viewport.t array
  val layout_borders :
    ?north:float ->
    ?south:float ->
    ?west:float ->
    ?east:float ->
    Archimedes.Viewport.t ->
    Archimedes.Viewport.t * Archimedes.Viewport.t * Archimedes.Viewport.t *
    Archimedes.Viewport.t * Archimedes.Viewport.t
  val ortho_from :
    Archimedes.Viewport.t ->
    Archimedes.Viewport.coord_name -> float * float -> float * float
  val data_from :
    Archimedes.Viewport.t ->
    Archimedes.Viewport.coord_name -> float * float -> float * float
  val set_line_width : Archimedes.Viewport.t -> float -> unit
  val set_font_size : Archimedes.Viewport.t -> float -> unit
  val set_mark_size : Archimedes.Viewport.t -> float -> unit
  val set_rel_line_width : Archimedes.Viewport.t -> float -> unit
  val set_rel_font_size : Archimedes.Viewport.t -> float -> unit
  val set_rel_mark_size : Archimedes.Viewport.t -> float -> unit
  val get_color : Archimedes.Viewport.t -> Archimedes.Color.t
  val get_background_color : Archimedes.Viewport.t -> Archimedes.Color.t
  val get_line_width : Archimedes.Viewport.t -> float
  val get_font_size : Archimedes.Viewport.t -> float
  val get_mark_size : Archimedes.Viewport.t -> float
  val lower_left_corner : Archimedes.Viewport.t -> float * float
  val upper_right_corner : Archimedes.Viewport.t -> float * float
  val dimensions : Archimedes.Viewport.t -> float * float
  val set_color : Archimedes.Viewport.t -> Archimedes.Color.t -> unit
  val set_global_line_cap :
    Archimedes.Viewport.t -> Archimedes.Backend.line_cap -> unit
  val set_global_dash : Archimedes.Viewport.t -> float -> float array -> unit
  val set_global_line_join :
    Archimedes.Viewport.t -> Archimedes.Backend.line_join -> unit
  val get_line_cap : Archimedes.Viewport.t -> Archimedes.Backend.line_cap
  val get_dash : Archimedes.Viewport.t -> float array * float
  val get_line_join : Archimedes.Viewport.t -> Archimedes.Backend.line_join
  val move_to : Archimedes.Viewport.t -> x:float -> y:float -> unit
  val line_to : Archimedes.Viewport.t -> x:float -> y:float -> unit
  val rel_move_to : Archimedes.Viewport.t -> x:float -> y:float -> unit
  val rel_line_to : Archimedes.Viewport.t -> x:float -> y:float -> unit
  val curve_to :
    Archimedes.Viewport.t ->
    x1:float ->
    y1:float -> x2:float -> y2:float -> x3:float -> y3:float -> unit
  val rectangle :
    Archimedes.Viewport.t -> x:float -> y:float -> w:float -> h:float -> unit
  val arc : Archimedes.Viewport.t -> r:float -> a1:float -> a2:float -> unit
  val close_path : Archimedes.Viewport.t -> unit
  val clear_path : Archimedes.Viewport.t -> unit
  val stroke_preserve :
    ?path:Archimedes.Path.t ->
    ?fit:bool ->
    Archimedes.Viewport.t -> Archimedes.Viewport.coord_name -> unit
  val stroke :
    ?path:Archimedes.Path.t ->
    ?fit:bool ->
    Archimedes.Viewport.t -> Archimedes.Viewport.coord_name -> unit
  val fill_preserve :
    ?path:Archimedes.Path.t ->
    ?fit:bool ->
    Archimedes.Viewport.t -> Archimedes.Viewport.coord_name -> unit
  val fill :
    ?path:Archimedes.Path.t ->
    ?fit:bool ->
    Archimedes.Viewport.t -> Archimedes.Viewport.coord_name -> unit
  val clip_rectangle :
    Archimedes.Viewport.t -> x:float -> y:float -> w:float -> h:float -> unit
  val select_font_face :
    Archimedes.Viewport.t ->
    Archimedes.Backend.slant -> Archimedes.Backend.weight -> string -> unit
  val text :
    Archimedes.Viewport.t ->
    ?coord:Archimedes.Viewport.coord_name ->
    ?rotate:float ->
    float -> float -> ?pos:Archimedes.Backend.text_position -> string -> unit
  val mark : Archimedes.Viewport.t -> x:float -> y:float -> string -> unit
  val axes_ratio : Archimedes.Viewport.t -> float -> unit
  val xrange : Archimedes.Viewport.t -> float -> float -> unit
  val yrange : Archimedes.Viewport.t -> float -> float -> unit
  val xlabel : Archimedes.Viewport.t -> string -> unit
  val ylabel : Archimedes.Viewport.t -> string -> unit
  val title : Archimedes.Viewport.t -> string -> unit
  val xmin : Archimedes.Viewport.t -> float
  val xmax : Archimedes.Viewport.t -> float
  val ymin : Archimedes.Viewport.t -> float
  val ymax : Archimedes.Viewport.t -> float
  val xlog : Archimedes.Viewport.t -> bool
  val ylog : Archimedes.Viewport.t -> bool
  val set_xlog : Archimedes.Viewport.t -> bool -> unit
  val set_ylog : Archimedes.Viewport.t -> bool -> unit
  val set_line_width_direct : Archimedes.Viewport.t -> float -> unit -> unit
  val set_font_size_direct : Archimedes.Viewport.t -> float -> unit -> unit
  val set_mark_size_direct : Archimedes.Viewport.t -> float -> unit -> unit
  val set_rel_line_width_direct :
    Archimedes.Viewport.t -> float -> unit -> unit
  val set_rel_font_size_direct :
    Archimedes.Viewport.t -> float -> unit -> unit
  val set_rel_mark_size_direct :
    Archimedes.Viewport.t -> float -> unit -> unit
  val set_color_direct :
    Archimedes.Viewport.t -> Archimedes.Color.t -> unit -> unit
  val set_line_cap_direct :
    Archimedes.Viewport.t -> Archimedes.Backend.line_cap -> unit -> unit
  val set_dash_direct :
    Archimedes.Viewport.t -> float -> float array -> unit -> unit
  val set_line_join_direct :
    Archimedes.Viewport.t -> Archimedes.Backend.line_join -> unit -> unit
  val stroke_direct :
    ?path:Archimedes.Path.t ->
    Archimedes.Viewport.t -> Archimedes.Viewport.coord_name -> unit -> unit
  val fill_direct :
    ?path:Archimedes.Path.t ->
    Archimedes.Viewport.t -> Archimedes.Viewport.coord_name -> unit -> unit
  val clip_rectangle_direct :
    Archimedes.Viewport.t ->
    x:float -> y:float -> w:float -> h:float -> unit -> unit
  val select_font_face_direct :
    Archimedes.Viewport.t ->
    Archimedes.Backend.slant ->
    Archimedes.Backend.weight -> string -> unit -> unit
  val show_text_direct :
    Archimedes.Viewport.t ->
    Archimedes.Viewport.coord_name ->
    ?rotate:float ->
    x:float ->
    y:float -> Archimedes.Backend.text_position -> string -> unit -> unit
  val mark_direct :
    Archimedes.Viewport.t -> x:float -> y:float -> string -> unit -> unit
  val save_direct : Archimedes.Viewport.t -> unit -> unit
  val restore_direct : Archimedes.Viewport.t -> unit -> unit
  val add_instruction : Archimedes.Viewport.t -> (unit -> unit) -> unit
  val do_instructions : Archimedes.Viewport.t -> unit
  val auto_fit :
    Archimedes.Viewport.t -> float -> float -> float -> float -> unit
  val fit : Archimedes.Viewport.t -> Archimedes.Matrix.rectangle -> unit
  val save : Archimedes.Viewport.t -> unit
  val restore : Archimedes.Viewport.t -> unit
end