# Module Pdffun

    module Pdffun: sig .. end

Parsing and Evaluating PDF Functions.

    type calculator =

`|` | `If of `calculator list``
`|` | `IfElse of `calculator list * calculator list``
`|` | `Bool of `bool``
`|` | `Float of `float``
`|` | `Int of `int32``
`|` | `Abs`
`|` | `Add`
`|` | `Atan`
`|` | `Ceiling`
`|` | `Cos`
`|` | `Cvi`
`|` | `Cvr`
`|` | `Div`
`|` | `Exp`
`|` | `Floor`
`|` | `Idiv`
`|` | `Ln`
`|` | `Log`
`|` | `Mod`
`|` | `Mul`
`|` | `Neg`
`|` | `Round`
`|` | `Sin`
`|` | `Sqrt`
`|` | `Sub`
`|` | `Truncate`
`|` | `And`
`|` | `Bitshift`
`|` | `Eq`
`|` | `Ge`
`|` | `Gt`
`|` | `Le`
`|` | `Lt`
`|` | `Ne`
`|` | `Not`
`|` | `Or`
`|` | `Xor`
`|` | `Copy`
`|` | `Exch`
`|` | `Pop`
`|` | `Dup`
`|` | `Index`
`|` | `Roll`

    type sampled = {

`` | `size : `int list`;`
`` | `order : `int`;`
`` | `encode : `float list`;`
`` | `decode : `float list`;`
`` | `bps : `int`;`
`` | `samples : `int32 array`;`

`}`

    type interpolation = {

`` | `c0 : `float list`;`
`` | `c1 : `float list`;`
`` | `n : `float`;`

`}`

    type stitching = {

`` | `functions : `t list`;`
`` | `bounds : `float list`;`
`` | `stitch_encode : `float list`;`

`}`

    type pdf_fun_kind =

`|` | `Interpolation of `interpolation``
`|` | `Stitching of `stitching``
`|` | `Sampled of `sampled``
`|` | `Calculator of `calculator list``

    type t = {

`` | `func : `pdf_fun_kind`;`
`` | `domain : `float list`;`
`` | `range : `float list option`;`

`}`

The type of functions.

    val parse_function : Pdf.t -> Pdf.pdfobject -> t

Parse a function given a document and function object.

    exception BadFunctionEvaluation of string

Raised from `eval_function` (see below) in the case of inputs which don't match the evaluation

    val eval_function : t -> float list -> float list

Evaluate a function given a list of inputs.

    val pdfobject_of_function : Pdf.t -> t -> Pdf.pdfobject

Flatten a function to its PDF representation

    val print_function : t -> unit

Print a function to Standard Output. For debug only.