#lang scheme/base
(require (lib "contract.ss"))
(provide
(rename-out (gamma unchecked-gamma)
(lngamma unchecked-lngamma)
(lngamma-sgn unchecked-lngamma-sgn)
(gammainv unchecked-gammainv)
(gamma* unchecked-gamma*)
(gammastar unchecked-gammastar)
(fact unchecked-fact)
(lnfact unchecked-lnfact)
(double-fact unchecked-double-fact)
(lndouble-fact unchecked-lndouble-fact)
(choose unchecked-choose)
(lnchoose unchecked-lnchoose)
(gamma-inc-Q unchecked-gamma-inc-Q)
(gamma-inc-P unchecked-gamma-inc-P)
(gamma-inc unchecked-gamma-inc)
(psi-int unchecked-psi-int)
(psi unchecked-psi)
(psi-1piy unchecked-psi-1piy)
(psi-1-int unchecked-psi-1-int)
(psi-1 unchecked-psi-1)
(psi-n unchecked-psi-n)
(zeta-int unchecked-zeta-int)
(zeta unchecked-zeta)
(zetam1-int unchecked-zetam1-int)
(zetam1 unchecked-zetam1)
(hzeta unchecked-hzeta)
(eta-int unchecked-eta-int)
(eta unchecked-eta)))
(provide/contract
(gamma
(-> real? real?))
(lngamma
(-> real? real?))
(lngamma-sgn
(-> real? (values real? (integer-in -1 1))))
(gammainv
(-> real? real?))
(gamma*
(-> (>/c 0.0) real?))
(gammastar
(-> (>/c 0.0) real?))
(fact
(-> natural-number/c (>=/c 1.0)))
(lnfact
(-> natural-number/c (>=/c 0.0)))
(double-fact
(-> natural-number/c (>=/c 1.0)))
(lndouble-fact
(-> natural-number/c (>=/c 0.0)))
(choose
(-> natural-number/c natural-number/c (>=/c 1.0)))
(lnchoose
(-> natural-number/c natural-number/c (>=/c 0.0)))
(gamma-inc-Q
(-> (>/c 0.0) (>=/c 0.0) real?))
(gamma-inc-P
(-> (>/c 0.0) (>=/c 0.0) real?))
(gamma-inc
(-> real? (>=/c 0.0) real?))
(psi-int
(-> natural-number/c real?))
(psi
(-> real? real?))
(psi-1piy
(-> real? real?))
(psi-1-int
(-> natural-number/c real?))
(psi-1
(-> real? real?))
(psi-n
(-> natural-number/c real? real?))
(zeta-int
(-> integer? real?))
(zeta
(-> real? real?))
(zetam1-int
(-> integer? real?))
(zetam1
(-> real? real?))
(hzeta
(-> (>/c 1.0) (>/c 0.0) real?))
(eta-int
(-> integer? real?))
(eta
(-> real? real?)))
(require "../machine.ss")
(require "../math.ss")
(require "../chebyshev.ss")
(require "error.ss")
(require "exponential-integral.ss")
(require (lib "include.ss"))
(include "gamma-imp.ss")
(include "gamma-inc-imp.ss")
(include "psi-imp.ss")
(include "zeta-imp.ss")