\documentclass{book}
%\newcommand{\VolumeName}{Volume 2: Axiom Users Guide}
%\input{bookheader.tex}
\pagenumbering{arabic}
\mainmatter
\setcounter{chapter}{0} % Chapter 1

\usepackage{makeidx}
\makeindex
\begin{document}
\begin{verbatim}
\start
Date: Sat, 1 Dec 2007 00:16:47 -0600
From: Tim Daly
To: Arthur Ralfs, Alfredo Portes
Subject: newhyper.pamphlet

Revision 50 checked in.
 Topics->Calculus complete
 <pre> is now a better font size

\start
Date: Sun, 2 Dec 2007 03:17:42 -0600
From: Tim Daly
To: Arthur Ralfs, Alfredo Portes
Subject: newhyper.pamphlet, axserver.spad.pamphlet

I've checked in a changed newhyper.pamphlet and a new file
axserver.spad.pamphlet. The new axserver code will be merged into 
silver shortly. Until then you have to manually compile and load it.

The major change is that database lookup works for categories,
domains, and packages. There is much more work to be done.

In order to see the new changes you have to use the new axserver.spad.
I've done some significant rewriting of the code and there is much
more to come. We can now reach both the axiom interpreter and the
lisp interpreter so we can construct any function we wish and use it
to generate web pages.

The good news is that this is the last known "technical" hurdle for
completely replacing hyperdoc with firefox. Now it is simply more rote work.

\start
Date: 03 Dec 2007 11:39:10 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: November 2007 source tarball

Congratulaions, Tim!

Request -- could you please maintain a page somewhere with a list of
files or links to the officially released versions in some format that
is lexicographically orderable?  This will facilitate automated
updates into Debian.  For example:

axiom-3.2.1.tar.gz
axiom 3.2.2.tar.gz

or 

axiom-20050901.tar.gz
axiom-20071107.tar.gz

etc.

Thanks for all your hard work!

Take care,

Tim Daly writes:

> Follow the src link at <http://daly.axiom-developer.org/axiombinary>
> or you can download the tarball directly from
> <http://daly.axiom-developer.org/axiombinary/silver-nov2007-src.tgz>
> 
> These will be moved and maintained in the future at
> <http://axiom-developer.org> or
> <http://axiom.axiom-developer.org>
> as soon as the new website details get settled.

\start
Date: 03 Dec 2007 17:32:22 -0500
From: Camm Maguire
To: Alexei Sheplyakov
Subject: Re: Bug#407109: axiom: loops forever while )read'ing expression

forwarded 407109 list
thanks

Tim -- don't know whether to laugh or cry about this one -- should
axiom be able to handle expressions of this size?

Take care,

Alexei Sheplyakov writes:

> Package: axiom
> Version: 20050901-9
> Severity: normal
> 
> Hello!
> 
> I've tried to )read quite a simple expression (available at
> http://theor.jinr.ru/~varg/web/misc/dia_142.input.gz). However
> axiom was unable to do this. Here is a transcript of my attempt:
> 
> 	 )read dia_142.input
> 
> 	 [snipped the expression itself]
> 
>    Loading /usr/lib/axiom-20050901/algebra/UPMP.o for package
>       UnivariatePolynomialMultiplicationPackage
>    Loading /usr/lib/axiom-20050901/algebra/PGCD.o for package
>       PolynomialGcdPackage
>    Loading /usr/lib/axiom-20050901/algebra/FRAC2.o for package
>       FractionFunctions2
>    Loading /usr/lib/axiom-20050901/algebra/QFCAT2.o for package
>       QuotientFieldCategoryFunctions2
>    Loading /usr/lib/axiom-20050901/algebra/POLY2.o for package
>       PolynomialFunctions2
>    Loading /usr/lib/axiom-20050901/algebra/POLYLIFT.o for package
>       PolynomialCategoryLifting
>    Loading /usr/lib/axiom-20050901/algebra/EXPR.o for domain Expression
> 
>    Loading /usr/lib/axiom-20050901/algebra/KERNEL.o for domain Kernel
>    Loading /usr/lib/axiom-20050901/algebra/SCACHE.o for package
>       SortedCache
>    Loading /usr/lib/axiom-20050901/algebra/VOID.o for domain Void
>    Loading /usr/lib/axiom-20050901/algebra/AN.o for domain
>       AlgebraicNumber
>    Loading /usr/lib/axiom-20050901/algebra/IAN.o for domain
>       InnerAlgebraicNumber
>    Loading /usr/lib/axiom-20050901/algebra/ACFS-.o for domain
>       AlgebraicallyClosedFunctionSpace&
>    Loading /usr/lib/axiom-20050901/algebra/FS-.o for domain
>       FunctionSpace&
>    Loading /usr/lib/axiom-20050901/algebra/COMMONOP.o for package
>       CommonOperators
>    Loading /usr/lib/axiom-20050901/algebra/KDAGG-.o for domain
>       KeyedDictionary&
>    Loading /usr/lib/axiom-20050901/algebra/DIAGG-.o for domain
>       Dictionary&
>    Loading /usr/lib/axiom-20050901/algebra/BOP1.o for package
>       BasicOperatorFunctions1
>    Loading /usr/lib/axiom-20050901/algebra/ACF-.o for domain
>       AlgebraicallyClosedField&
>    Loading /usr/lib/axiom-20050901/algebra/ES-.o for domain
>       ExpressionSpace&
>    Loading /usr/lib/axiom-20050901/algebra/POLYCATQ.o for package
>       PolynomialCategoryQuotientFunctions
>    Loading /usr/lib/axiom-20050901/algebra/IDPOAMS.o for domain
>       IndexedDirectProductOrderedAbelianMonoidSup
>    Loading /usr/lib/axiom-20050901/algebra/IDPOAM.o for domain
>       IndexedDirectProductOrderedAbelianMonoid
>    Loading /usr/lib/axiom-20050901/algebra/EVALAB-.o for domain
>       Evalable&
>    Loading /usr/lib/axiom-20050901/algebra/FRETRCT-.o for domain
>       FullyRetractableTo&
>    Loading /usr/lib/axiom-20050901/algebra/FSAGG-.o for domain
>       FiniteSetAggregate&
>    Loading /usr/lib/axiom-20050901/algebra/FLASORT.o for package
>       FiniteLinearAggregateSort
>    Loading /usr/lib/axiom-20050901/algebra/FACUTIL.o for package
>       FactoringUtilities
>    Loading /usr/lib/axiom-20050901/algebra/HEUGCD.o for package HeuGcd
>    Loading /usr/lib/axiom-20050901/algebra/INMODGCD.o for package
>       InnerModularGcd
>    Loading /usr/lib/axiom-20050901/algebra/EMR.o for domain
>       EuclideanModularRing
>    Loading /usr/lib/axiom-20050901/algebra/MDDFACT.o for package
>       ModularDistinctDegreeFactorizer
>    Loading /usr/lib/axiom-20050901/algebra/MODRING.o for domain
>       ModularRing
>    Loading /usr/lib/axiom-20050901/algebra/EF.o for package
>       ElementaryFunction
>    Loading /usr/lib/axiom-20050901/algebra/BASTYPE-.o for domain
>       BasicType&
>    Loading /usr/lib/axiom-20050901/algebra/TRANFUN-.o for domain
>       TranscendentalFunctionCategory&
>    Loading /usr/lib/axiom-20050901/algebra/IEVALAB-.o for domain
>       InnerEvalable&
>    Loading /usr/lib/axiom-20050901/algebra/TRIGCAT-.o for domain
>       TrigonometricFunctionCategory&
>    Loading /usr/lib/axiom-20050901/algebra/ATRIG-.o for domain
>       ArcTrigonometricFunctionCategory&
>    Loading /usr/lib/axiom-20050901/algebra/HYPCAT-.o for domain
>       HyperbolicFunctionCategory&
>    Loading /usr/lib/axiom-20050901/algebra/ELEMFUN-.o for domain
>       ElementaryFunctionCategory&
>    Loading /usr/lib/axiom-20050901/algebra/RADCAT-.o for domain
>       RadicalCategory&
>    Loading /usr/lib/axiom-20050901/algebra/AF.o for package
>       AlgebraicFunction
>    Loading /usr/lib/axiom-20050901/algebra/POLYROOT.o for package
>       PolynomialRoots
>    Loading /usr/lib/axiom-20050901/algebra/INTFACT.o for package
>       IntegerFactorizationPackage
>    Loading /usr/lib/axiom-20050901/algebra/IROOT.o for package
>       IntegerRoots
>    Loading /usr/lib/axiom-20050901/algebra/FACTFUNC.o for package
>       FactoredFunctions
>    Loading /usr/lib/axiom-20050901/algebra/MLIFT.o for package
>       MultivariateLifting
>    Loading /usr/lib/axiom-20050901/algebra/NPCOEF.o for package NPCoef
>    Loading /usr/lib/axiom-20050901/algebra/VECTCAT-.o for domain
>       VectorCategory&
>    Loading /usr/lib/axiom-20050901/algebra/GENEEZ.o for package
>       GenExEuclid
>    Loading /usr/lib/axiom-20050901/algebra/VECTOR2.o for package
>       VectorFunctions2
>    Loading /usr/lib/axiom-20050901/algebra/FLAGG2.o for package
>       FiniteLinearAggregateFunctions2
>    Loading /usr/lib/axiom-20050901/algebra/COMBINAT.o for package
>       IntegerCombinatoricFunctions
>    Loading /usr/lib/axiom-20050901/algebra/HACKPI.o for domain Pi
>    Loading /usr/lib/axiom-20050901/algebra/PICOERCE.o for package
>       PiCoercions
> 
> 	[after more than 17 hours I got bored and killed axiom]
> 
> I've also tried to )read the same expression using x86 version of Axiom
> (in x86 chroot and on real x86 box). The same error occures.
> 
> Best regards,
>  Alexei
> 
> -- System Information:
> Debian Release: 4.0
>   APT prefers testing
>   APT policy: (500, 'testing')
> Architecture: amd64 (x86_64)
> Shell:  /bin/sh linked to /bin/dash
> Kernel: Linux 2.6.17.11-grsec-em64t-p4
> Locale: LANG=ru_RU.UTF-8, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8)
> 
> Versions of packages axiom depends on:
> ii  axiom-databases           20050901-9     A general purpose computer algebra
> ii  libc6                     2.3.6.ds1-8    GNU C Library: Shared libraries
> ii  libgmp3c2                 2:4.2.1+dfsg-4 Multiprecision arithmetic library
> ii  libice6                   1:1.0.1-2      X11 Inter-Client Exchange library
> ii  libncurses5               5.5-5          Shared libraries for terminal hand
> ii  libreadline5              5.2-2          GNU readline and history libraries
> ii  libsm6                    1:1.0.1-3      X11 Session Management library
> ii  libx11-6                  2:1.0.3-4      X11 client-side library
> ii  libxaw7                   1:1.0.2-4      X11 Athena Widget library
> ii  libxext6                  1:1.0.1-2      X11 miscellaneous extension librar
> ii  libxmu6                   1:1.0.2-2      X11 miscellaneous utility library
> ii  libxt6                    1:1.0.2-2      X11 toolkit intrinsics library
> 
> Versions of packages axiom recommends:
> ii  axiom-doc                     20050901-9 A general purpose computer algebra
> ii  axiom-graphics                20050901-9 A general purpose computer algebra
> ii  axiom-hypertex                20050901-9 A general purpose computer algebra
> pn  axiom-source                  <none>     (no description available)
> 
> -- no debconf information
> 
> -- 
> All science is either physics or stamp collecting.
> 

\start
Date: 03 Dec 2007 17:39:53 -0500
From: Camm Maguire
To: Frederic Lehobey
Subject: Re: Bug#231800: axiom: )edit command broken

forwarded 231800 list
thanks

Tim, we've discussed this before -- any update here?

Take care,

Frederic Lehobey writes:

> Package: axiom
> Version: 0.20040128-3
> Severity: normal
>
> The command )show is broken (see below).  Moreover, even if the
> /usr/lib/axiom-0.20040128/lib/SPADEDIT was set, the path would still
> be incorrect:
>
>   /usr/lib/axiom-0.20040128/../../src/algebra/BASTYPE.spad
>
> should actually be
>
>   /usr/lib/axiom-0.20040128/src/algebra/catdef.spad .
>
> Thanks,
> Frederic
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ an axiom session ~~~~~~~~~~~~~~~~~~~~~~~~~~
> (1) -> )show BASTYPE
>  BasicType  is a category constructor
>  Abbreviation for BasicType is BASTYPE
>  This constructor is exposed in this frame.
>  Issue )edit /usr/lib/axiom-0.20040128/../../src/algebra/BASTYPE.spad to=

> see algebra source code for BASTYPE
>
> ------------------------------- Operations ------------------------------=
--
>  ?=? : (%,%) -> Boolean                ?~=? : (%,%) -> Boolean
>
> (1) -> )edit /usr/lib/axiom-0.20040128/../../src/algebra/BASTYPE.spad
> sh: line 1: /usr/lib/axiom-0.20040128/lib/SPADEDIT: Aucun fichier ou
> r=C3=A9pertoire de ce type
>
>
> -- System Information:
> Debian Release: testing/unstable
>   APT prefers unstable
>   APT policy: (500, 'unstable')
> Architecture: powerpc (ppc)
> Kernel: Linux 2.4.22-powerpc
> Locale: LANG=fr_FR@euro.UTF-8, LC_CTYPE=fr_FR@euro.UTF-8
>
> Versions of packages axiom depends on:
> ii  libc6                     2.3.2.ds1-11   GNU C Library: Shared librar=
ies an
> ii  libgmp3                   4.1.2-3        Multiprecision arithmetic li=
brary
> ii  libncurses5               5.3.20030719-5 Shared libraries for termina=
l hand
> ii  libreadline4              4.3-10         GNU readline and history lib=
raries
>
> -- debconf information:
> perl: warning: Setting locale failed.
> perl: warning: Please check that your locale settings:
> 	LANGUAGE = (unset),
> 	LC_ALL = (unset),
> 	LANG = "fr_FR@euro.UTF-8"
>     are supported and installed on your system.
> perl: warning: Falling back to the standard locale ("C").
> locale: Cannot set LC_CTYPE to default locale: No such file or directory
> locale: Cannot set LC_MESSAGES to default locale: No such file or directo=
ry
> locale: Cannot set LC_ALL to default locale: No such file or directory

\start
Date: Mon, 3 Dec 2007 18:51:34 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Bug#407109: axiom: loops forever while )read'ing expression
Cc: Alexei Sheplyakov

I get a "missing mate" error on the input.

\start
Date: Mon, 3 Dec 2007 19:02:13 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Bug#407109: axiom: loops forever while )read'ing expression
Cc: Alexei Sheplyakov

This isn't a "large" expression for Axiom. 
I've generated larger so I think Axiom can certainly handle it.
I'm checking a later version (the one on Debian is from 2005)

\start
Date: Mon, 3 Dec 2007 22:53:56 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Bug#231800: axiom: )edit command broken
Cc: Frederic Lehobey

I've never used the )edit command since I always run Axiom in
an emacs buffer.

The issue is that the source filename is broken.
This will be fixed shortly as I'm reworking hyperdoc and
need to get the correct sourcefile information.

It might happen by the weekend but won't show up in Gold until the
January release. It'll be in silver shortly after it works.


\start
Date: Tue, 4 Dec 2007 06:26:13 +0100 (CET)
From: Waldek Hebisch
To: Camm Maguire
Subject: re: Bug#407109: axiom: loops forever while )read'ing expression

Camm Maguire wrote:
> Tim -- don't know whether to laugh or cry about this one -- should
> axiom be able to handle expressions of this size?
> 
> Take care,
> 
> Alexei Sheplyakov writes:
> 
> > I've tried to )read quite a simple expression (available at
> > http://theor.jinr.ru/~varg/web/misc/dia_142.input.gz). However
> > axiom was unable to do this. Here is a transcript of my attempt:
> > 
> > 	 )read dia_142.input
> > 

Axiom can handle expressions of this size, but there is danger
of running out of memory.  Certainly, doing things naively takes
too much time.  More preciely, this expression represents
substantial calculation.  The problem is that after adding
each term Axiom tries to simplify common factors, which
requires gcd computations.  And gcd computations take a lot
of time.

The problem becomes doable when each term of the original
sum is assingned to separate array location.  Then one
can compute least common multiple of denominators (which
is a polynomial having 200 terms) -- which gives candidate
for common denominator.  Next, one can multiply numerators
by the candidate common denominator and add them getting
numerator of unsimplified sum (a polynomial of 388795 terms).
Finally computing gcd of unsimplified numerator with candidate
common denominator one finds out that things candidate common
denominator divides the mumerator.  Dividing one gets result
(a polynomial of 13281 terms).

A script below perform those operatis (the file dia_142a.input
assigns i-th trm of the sum to T.i):

)read "dia_142a.input"
TD := map(denom, T);
BD := lcm(members(TD));
LN := members(map(numer, T));
LN1 := [x*BD for x in LN];
BN := reduce(_+, LN1, 0);
CF := gcd(BN, BD);
(BD = CF)::Boolean
RESS := exquo(BN, CF);


On my machine the whole computation took about 10 minutes, the
multiplication by BD beeing most expensive (and the gcd the
second most expensive).

I was also able to directly compute sum of first 99 terms
-- it took about 9 minutes and the resulting numerator
had about 16 tousend terms.  So it is possible that reporter
was too impatient -- I think that the computation would
finish (or run out of memory) in few days.

Now, one problem is that Axiom naively computes the sum.
Another problem is that gcd computations take quite a lot of
time (it seems that other systems can compute gcd 10-100
times faster).

\start
Date: Tue, 4 Dec 2007 09:42:19 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Bug#407109: axiom: loops forever while )read'ing expression
Cc: Alexei Sheplyakov

I broke the original assignment into 16 smaller assignments and am
able to read the 16 terms. However, attempting to multiply the terms
together generates intermediate expressions that are too large for
memory.

\start
Date: 04 Dec 2007 16:05:22 -0500
From: Camm Maguire
To: Waldek Hebisch
Subject: re: Bug#407109: axiom: loops forever while )read'ing expression

Waldek Hebisch writes:

> Camm Maguire wrote:
> > Tim -- don't know whether to laugh or cry about this one -- should
> > axiom be able to handle expressions of this size?
> > 
> > Take care,
> > 
> > Alexei Sheplyakov writes:
> > 
> > > I've tried to )read quite a simple expression (available at
> > > http://theor.jinr.ru/~varg/web/misc/dia_142.input.gz). However
> > > axiom was unable to do this. Here is a transcript of my attempt:
> > > 
> > > 	 )read dia_142.input
> > > 
> 
> Axiom can handle expressions of this size, but there is danger
> of running out of memory.  Certainly, doing things naively takes
> too much time.  More preciely, this expression represents
> substantial calculation.  The problem is that after adding
> each term Axiom tries to simplify common factors, which
> requires gcd computations.  And gcd computations take a lot
> of time.
> 
> The problem becomes doable when each term of the original
> sum is assingned to separate array location.  Then one
> can compute least common multiple of denominators (which
> is a polynomial having 200 terms) -- which gives candidate
> for common denominator.  Next, one can multiply numerators
> by the candidate common denominator and add them getting
> numerator of unsimplified sum (a polynomial of 388795 terms).
> Finally computing gcd of unsimplified numerator with candidate
> common denominator one finds out that things candidate common
> denominator divides the mumerator.  Dividing one gets result
> (a polynomial of 13281 terms).
> 
> A script below perform those operatis (the file dia_142a.input
> assigns i-th trm of the sum to T.i):
> 
> )read "dia_142a.input"
> TD := map(denom, T);
> BD := lcm(members(TD));
> LN := members(map(numer, T));
> LN1 := [x*BD for x in LN];
> BN := reduce(_+, LN1, 0);
> CF := gcd(BN, BD);
> (BD = CF)::Boolean
> RESS := exquo(BN, CF);
> 
> 
> On my machine the whole computation took about 10 minutes, the
> multiplication by BD beeing most expensive (and the gcd the
> second most expensive).
> 
> I was also able to directly compute sum of first 99 terms
> -- it took about 9 minutes and the resulting numerator
> had about 16 tousend terms.  So it is possible that reporter
> was too impatient -- I think that the computation would
> finish (or run out of memory) in few days.
> 
> Now, one problem is that Axiom naively computes the sum.
> Another problem is that gcd computations take quite a lot of
> time (it seems that other systems can compute gcd 10-100
> times faster).
> 

Does axiom use GCL's gcd?  Are the gcd arguments most frequently
fixnums or smaller?  2.7.0 has about a 2x improvement here, another
10% is easily in reach.  This seems even with cmucl and considerably
faster than clisp.  I'm obviously interested in any factor of 10 or
100 that might be available -- any details here?

\start
Date: Tue, 4 Dec 2007 23:13:34 +0100 (CET)
From: Waldek Hebisch
To: Camm Maguire
Subject: re: Bug#407109: axiom: loops forever while )read'ing expression

Camm Maguire wrote:
> Greetings!
> 
> Waldek Hebisch writes:
> > Now, one problem is that Axiom naively computes the sum.
> > Another problem is that gcd computations take quite a lot of
> > time (it seems that other systems can compute gcd 10-100
> > times faster).
> > 
> 
> Does axiom use GCL's gcd?  Are the gcd arguments most frequently
> fixnums or smaller?  2.7.0 has about a 2x improvement here, another
> 10% is easily in reach.  This seems even with cmucl and considerably
> faster than clisp.  I'm obviously interested in any factor of 10 or
> 100 that might be available -- any details here?
> 

I mean here polynomial gcd.  Yes, Axiom polynomial gcd uses integer
gcd from GCL (or more generally form the underlying Lisp).  However,
in best algorithms (IIRC Axiom has 6 different gcd algorithms) integer
gcd typically takes only small fraction of the time.  Best algoritms
use modular methods -- most of the time is spent in modular arithmetic
operating on rather small numbers.  I write "rather small" because
for problems like above the minimal size that works well is probably
of order 40 bits -- if fixnums are limited to 32 bit some program
use doubles instead.

Concerning Axiom slowness -- main reason is on Axiom side: every
modular arithmetic operation is done via (indirect!) function call.
This incures cost of function calls and (probably more important)
give no chance to Lisp optimizer.  And all opertaion are done in
generic arithmetic.

Of course, good Lisp can make Axiom code to run faster.  One obvious
thing is to have fast function calls.  Another is to have directly
representable fixnums (IIUC GCL 2.7.0 has them).  Also gc times may be
quite significant.  FYI, I have found that on polynomial manipulation
(in particular gcd) SBCL worked significantly faster (1.5 to 3 times
faster).  While I was unable to profile GCL, SBCL profile indicated
that significant percentage of time went into fixnum arithmetic,
so representable fixnums can help a lot.

While improvements in Lisp implementation can give us some speed
increase (say 2-3 times), I belive that in short term correct way
to speed up Axiom is to move some core computations down to Lisp or
C level.  In longer term improved Spad compiler could in principle
generate efficient Lisp code...

\start
Date: Wed, 5 Dec 2007 14:17:02 +0100 (CET)
From: Waldek Hebisch
To: Tim Daly
Subject: Re: bug 7016 mathml display of %%var is wrong
Cc: Arthur Ralfs

Tim Daly wrote:
> Arthur,
> 
> zerosOf(y**4+1,y)
> definingPolynomial %y1
>         2
>    %%var +1
> 
> but mathml gives:
>       2
>    var +1
> 
> somebody ate the %%.
> 

The following should fix the problem (removes percent eater):

--- /home/s/test/tt/fricas/trunk/src/algebra/mathml.spad.pamphlet	2007-10-03 21:15:17.000000000 +0200
+++ trunk/src/algebra/mathml.spad.pamphlet	2007-12-05 14:05:38.000000000 +0100
@@ -1267,10 +1270,6 @@
 	-- ExponentialE
         str = "%i"  => "<mi>&#x02148;</mi>"
 	-- ImaginaryI
-	-- what sort of atom starts with %%? need an example
-        len > 1 and str.1 = char "%" and str.2 = char "%" =>
-          u : US := segment(3,len)$US
-          concat(concat("<mi>",str.u),"</mi>")
         len > 0 and str.1 = char "%" => concat(concat("<mi>",str),"</mi>")
         len > 1 and digit? str.1 => concat ["<mn>",str,"</mn>"] -- should handle floats
 	-- presumably this is a literal string

\start
Date: Wed, 5 Dec 2007 14:21:14 +0100 (CET)
From: Waldek Hebisch
To: Tim Daly
Subject: Re: bug 7014: mathml parsing bug
Cc: Arthur Ralfs

Tim Daly wrote:
> Arthur,
> 
> )set out mathml on
> z:=continuedFraction(3,repeating [1], repeating [3,6])
> 
> gives the correct answer and then fails with:
> 
>  >> System error:
>  Cannot take first of an empty list
> 

The following should fix this:

--- /home/s/test/tt/fricas/trunk/src/algebra/mathml.spad.pamphlet	2007-10-03 21:15:17.000000000 +0200
+++ trunk/src/algebra/mathml.spad.pamphlet	2007-12-05 14:05:38.000000000 +0100
@@ -1227,7 +1227,9 @@
     -- {{ZAG}{1}{7}}
       tmpZag : L E := first args pretend L E
       #args > 1 => "<mfrac>"formatMml(first rest tmpZag,minPrec)"<mrow><mn>"formatMml(first rest rest tmpZag,minPrec)"</mn><mo>+</mo>"formatZag(rest args)"</mrow></mfrac>"
-      "<mfrac>"formatMml(first rest tmpZag,minPrec)formatMml(first rest rest tmpZag,minPrec)"</mfrac>"
+      -- EQUAL(tmpZag, "...")$Lisp => "<mo>&#x2026;</mo>"
+      (first args = "...":: E)@Boolean => "<mo>&#x2026;</mo>"
+      error "formatZag: Unexpected kind of ZAG"
       
     formatZag1(args : L E) : S ==
     -- make alternative ZAG format without diminishing fonts, maybe
@@ -1235,7 +1237,8 @@
     -- {{ZAG}{1}{7}}
       tmpZag : L E := first args pretend L E
       #args > 1 => "<mfrac>"formatMml(first rest tmpZag,minPrec)"<mrow><mn>"formatMml(first rest rest tmpZag,minPrec)"</mn><mo>+</mo>"formatZag(rest args)"</mrow></mfrac>"
-      "<mfrac>"formatMml(first rest tmpZag,minPrec)formatMml(first rest rest tmpZag,minPrec)"</mfrac>"
+      (first args = "...":: E)@Boolean => "<mo>&#x2026;</mo>"
+      error "formatZag1: Unexpected kind of ZAG"
 
     formatMml(expr : E,prec : I) ==
       i,len : Integer

\start
Date: 05 Dec 2007 09:17:35 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Bug#407109: axiom: loops forever while )read'ing expression
Cc: Alexei Sheplyakov

Greetings, and thanks Tim!  Does this mean that there is an issue with
the original "missing mate" error on the unbroken expression?

Separately, is there any clear path to accelerate the relevant
algorithms along the lines of Waldek's suggestions?  Or is this
inadvisable?

Take care,

Tim Daly writes:

> Camm,
> 
> I broke the original assignment into 16 smaller assignments and am
> able to read the 16 terms. However, attempting to multiply the terms
> together generates intermediate expressions that are too large for
> memory.

\start
Date: Wed, 5 Dec 2007 13:16:00 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Bug#407109: axiom: loops forever while )read'ing expression
Cc: Alexei Sheplyakov

>Greetings, and thanks Tim!  Does this mean that there is an issue with
>the original "missing mate" error on the unbroken expression?

I did a clip of the line and fed it to Axiom. I suspect the issue is that
the line length was exceeded and clipped, leading to a shorter line being
fed to Axiom. 

>Separately, is there any clear path to accelerate the relevant
>algorithms along the lines of Waldek's suggestions?  Or is this
>inadvisable?

I believe Waldek has identified 6 places where Axiom does GCDs.

If I were to attack the problem I'd probably:
   a) ask Waldek for those locations
   b) develop a set of increasingly expensive test cases for each one
   c) examine the detailed behavior with profiles to determine what costs
   d) make a change
   e) measure the difference
   f) loop back to c
   g) document the algorithms, measures, and results (conf paper?)

This is a fairly well contained problem and, if I had students, I'd
assign it as a path toward a publication. Perhaps with Google's
summer of code we could get a student to work on it.

At the moment all of my resources are pressing toward a new hyperdoc
that uses firefox so we can all drop the old code and use something
that is both portable and useful for things like Sage. The code and
pages I'm developing should work for all three systems. But as a
side-effect, I have no time to look into the gcd issues.

\start
Date: Wed, 5 Dec 2007 13:17:14 -0500
From: Tim Daly
To: Waldek Hebisch
Subject: Re: bug 7014: mathml parsing bug
Cc: Arthur Ralfs

Thanks. I'll apply those patches this evening. -- Tim

\start
Date: Wed, 5 Dec 2007 19:14:17 -0600
From: Tim Daly
To: list
Subject: 20071205.01.tpd.patch
Cc: Arthur Ralfs

This patch contains two posted bug fixes by Waldek for mathml.

bug 7014: Cannot take first of an empty list
fixed by waldek patch 20071205.01.tpd.patch

)set out mathml on
z:=continuedFraction(3,repeating [1],repeating [3,6])

   (7)
           1 |     1 |     1 |     1 |     1 |     1 |     1 |     1 |     1 |
     3 + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+
         | 3     | 6     | 3     | 6     | 3     | 6     | 3     | 6     | 3
   + 
       1 |
     +---+ + ...
     | 6
 
   >> System error:
   Cannot take first of an empty list



bug 7016: display of %%var is wrong
fixed by waldek patch 20071205.01.tpd.patch

)set out mathml on
zerosOf(y**4+1,y)
definingPolynomial %y1
   %%var^2+1
but the mathml shows
   var^2+1



============================================================================
diff --git a/changelog b/changelog
index cb6b97b..e553040 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20071205 wxh src/algebra/mathml fix empty list on continuedFraction bug (7014)
+20071205 wxh src/algebra/mathml remove code to eat %% (bug 7016)
 20071129 tpd zips/axiomfonts.tgz remove fonts, change instructions
 20071129 tpd zips/axiomfonts.tgz add mathml fonts
 20071119 tpd Makefile.pamphlet add fedora6,7,8 stanzas
diff --git a/src/algebra/mathml.spad.pamphlet b/src/algebra/mathml.spad.pamphlet
index f704c76..e5eaaf7 100644
--- a/src/algebra/mathml.spad.pamphlet
+++ b/src/algebra/mathml.spad.pamphlet
@@ -1227,7 +1227,9 @@ have to be switched by swapping names.
     -- {{ZAG}{1}{7}}
       tmpZag : L E := first args pretend L E
       #args > 1 => "<mfrac>"formatMml(first rest tmpZag,minPrec)"<mrow><mn>"formatMml(first rest rest tmpZag,minPrec)"</mn><mo>+</mo>"formatZag(rest args)"</mrow></mfrac>"
-      "<mfrac>"formatMml(first rest tmpZag,minPrec)formatMml(first rest rest tmpZag,minPrec)"</mfrac>"
+      -- EQUAL(tmpZag, "...")$Lisp => "<mo>&#x2026;</mo>"
+      (first args = "...":: E)@Boolean => "<mo>&#x2026;</mo>"
+      error "formatZag: Unexpected kind of ZAG"
       
     formatZag1(args : L E) : S ==
     -- make alternative ZAG format without diminishing fonts, maybe
@@ -1235,7 +1237,9 @@ have to be switched by swapping names.
     -- {{ZAG}{1}{7}}
       tmpZag : L E := first args pretend L E
       #args > 1 => "<mfrac>"formatMml(first rest tmpZag,minPrec)"<mrow><mn>"formatMml(first rest rest tmpZag,minPrec)"</mn><mo>+</mo>"formatZag(rest args)"</mrow></mfrac>"
-      "<mfrac>"formatMml(first rest tmpZag,minPrec)formatMml(first rest rest tmpZag,minPrec)"</mfrac>"
+      (first args = "...":: E)@Boolean => "<mo>&#x2026;</mo>"
+      error "formatZag1: Unexpected kind of ZAG"
+
 
     formatMml(expr : E,prec : I) ==
       i,len : Integer
@@ -1267,10 +1271,6 @@ have to be switched by swapping names.
 	-- ExponentialE
         str = "%i"  => "<mi>&#x02148;</mi>"
 	-- ImaginaryI
-	-- what sort of atom starts with %%? need an example
-        len > 1 and str.1 = char "%" and str.2 = char "%" =>
-          u : US := segment(3,len)$US
-          concat(concat("<mi>",str.u),"</mi>")
         len > 0 and str.1 = char "%" => concat(concat("<mi>",str),"</mi>")
         len > 1 and digit? str.1 => concat ["<mn>",str,"</mn>"] -- should handle floats
 	-- presumably this is a literal string

\start
Date: Thu, 6 Dec 2007 21:53:14 -0600
From: Tim Daly
To: list
Subject: 20071206.01.tpd.patch (bug 7020)

Find the correct sourcefile and source line for any constructor or abbrev.

=======================================================================
diff --git a/changelog b/changelog
index e553040..23d4812 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071206 tpd src/interp/daase.lisp find the right sourcefile (bug 7020)
 20071205 wxh src/algebra/mathml fix empty list on continuedFraction bug (7014)
 20071205 wxh src/algebra/mathml remove code to eat %% (bug 7016)
 20071129 tpd zips/axiomfonts.tgz remove fonts, change instructions
diff --git a/src/interp/daase.lisp.pamphlet b/src/interp/daase.lisp.pamphlet
index e0c20a7..ccf699b 100644
--- a/src/interp/daase.lisp.pamphlet
+++ b/src/interp/daase.lisp.pamphlet
@@ -324,6 +324,7 @@ database.
  (setq *operation-hash* (make-hash-table))
  (setq *allconstructors* nil)
  (setq *compressvector* nil)
+ (setq *sourcefiles* nil)
  (setq *compress-stream-stamp* '(0 . 0))
  (compressopen)
  (setq *interp-stream-stamp* '(0 . 0))
@@ -1107,7 +1108,6 @@ database.
     (|unloadOneConstructor| (get abbrev 'abbreviationfor) abbrev) )
   (|sayKeyedMsg| 'S2IU0001 (list key object))))))
 
-
 ; making new databases consists of:
 ;  1) reset all of the system hash tables
 ;  *) set up Union, Record and Mapping
@@ -1127,8 +1127,43 @@ database.
 ; critical. interp.daase depends on prior computations and has
 ; to be written out last.
 
+; the build-name-to-pamphlet-hash builds a hash table whose key->value is:
+;   abbreviation -> pamphlet file name
+;   abbreviation-line -> pamphlet file position
+;   constructor -> pamphlet file name
+;   constructor-line -> pamphlet file position
+; is the symbol of the constructor name and whose value is the name of
+; the source file without any path information. We  hash the 
+; constructor abbreviation to pamphlet file name.
+
 (defun make-databases (ext dirlist)
  (labels (
+  (build-name-to-pamphlet-hash (dir)
+   (let ((ht (make-hash-table)) (eof '(done))
+         point mark end abbrev name file)
+    (dolist (fn (directory dir))
+     (with-open-file (f fn)
+      (do ((ln (read-line f nil eof) (read-line f nil eof))
+           (line 0 (incf line)))
+          ((eq ln eof))
+     (when (search ")abb" ln)
+       (setq mark (position #\space ln :from-end t))
+       (setq name (intern (string-trim '(#\space) (subseq ln mark))))
+       (cond
+         ((setq mark (search "domain" ln)) (setq mark (+ mark 7)))
+         ((setq mark (search "package" ln)) (setq mark (+ mark 8)))
+         ((setq mark (search "category" ln)) (setq mark (+ mark 9))))
+       (setq point (position #\space ln :start (+ mark 1)))
+       (setq abbrev 
+        (intern (string-trim '(#\space) (subseq ln mark point))))
+       (setq ns (namestring fn))
+       (setq mark (position #\/ ns :from-end t))
+       (setq file (subseq ns (+ mark 1)))
+       (setf (gethash abbrev ht) file)
+       (setf (gethash (format nil "~a-line" abbrev) ht) line)
+       (setf (gethash name ht) file)
+       (setf (gethash (format nil "~a-line" name) ht) line)))))
+    ht))
     ;; these are types which have no library object associated with them.
     ;; we store some constructed data to make them perform like library
     ;; objects, the *operationalist-hash* key entry is used by allConstructors
@@ -1182,6 +1217,9 @@ database.
   (|browserAutoloadOnceTrigger|)
 #+:AKCL    (|mkTopicHashTable|)
   (setq |$constructorList| nil) ;; affects buildLibdb
+  (setq *sourcefiles* (build-name-to-pamphlet-hash 
+    (concatenate 'string (|getEnv| "AXIOM") 
+      "/../../src/algebra/*.spad.pamphlet")))
   (|buildLibdb|)
   (|dbSplitLibdb|)
 ; (|dbAugmentConstructorDataTable|)
@@ -1634,7 +1672,7 @@ time stamp at the top of the file and close the file.
    (let (struct)
     (setq struct (get constructor 'database))
      ; sourcefile is small. store the string directly
-    (setq src (database-sourcefile struct))
+    (setq src (gethash constructor *sourcefiles*))
     (setq formpos (file-position out))
     (print (squeeze (database-constructorform struct)) out)
     (finish-output out)

\start
Date: Fri, 7 Dec 2007 02:35:18 -0600
From: Tim Daly
To: Arthur Ralfs
Subject: mathml bug 7021: vertical bar is not implemented properly

bug 7021: vertical bar is not implemented properly.

m1:=matrix [[1,2,1],[2,1,-2],[1,-2,4]]
eigenvalues(m1)
  should be
                 2
     [5,%DA | %DA  - %DA - 5]

  but instead prints as:
                 2
     [5,%DA ? %DA  - %DA - 5]
            ?

\start
Date: Sat, 8 Dec 2007 20:57:16 -0600
From: Tim Daly
To: William Stein
Subject: 3D graphics in Sage

William,

Axiom includes a standalone, 2D and 3D graphics program. The program
can be used independently from Axiom or directly inside Axiom. It
pops up a separate window normally so you can manipulate the output
(shade, rotate, etc). The program is capable of writing postscript
output. You can also create the postscript programatically so it
would be possible to embed the 3D postscript output in a Sage session.

I can give you more information if you are interested.

\start
Date: Sat, 8 Dec 2007 22:03:14 -0600
From: Tim Daly
To: list
Subject: Interesting quote

Sage hit slashdot (and slashdot it back, I'm sure).
One anonymous coward posted the following quote which I find
worth preserving. The Crystal idea is a bit beyond what he's
thinking but I think he's on the right track.


I am a mathematician and shelling out a few hundred or even thousand
bucks for software is not a problem. A problem is that there is that
there is a gap in tools. There is one tool missing that would make
math much more accessible. The tool an IDE. Most IDEs that exist for
witting math are modeled after software development IDEs. But those do
not at all parallel how mathematicians think or write. We end up with
a lot of paper and books in higher math (post introductory undergrad
level) that are written in plain text. Diagrams are very few and
cross-references are often unintuitive. If there was a tool that
allowed to write math as easily as code is written in vi (or
emacs... please wait until Sunday morning for this flame war... that's
what Sunday mornings are for), to create diagrams as easily as AutoCad
creates mechanical drawings, that would realize that an item of text
maybe best served with a commutative diagram (which it would
immediately offer to draw) and that another part of the text is
probably a bibliography reference, then math would be developed as
well as software is. Basically, all the tools out there are still
trying to give mathematicians the freedom to write anything that would
write on paper. There is no tool that is really context-aware. If such
a tool did exist, it would leave all the others in the dust. Cost
would not matter. It would be to Mathematica what KDE is to Windows
desktop. Perhaps, this is too much to ask for. Perhaps, a better start
would be a language that captured the thought process of writing math
the way that emacs captured the thought process of witting different
types of text. And no TeX is not it. TeX only helps to typeset math to
make it look pretty. It doesn't make witting math on a computer easier
than writing it by hand.

\start
Date: Sat, 8 Dec 2007 22:58:54 -0600
From: Tim Daly
To: William Stein
Subject: Web pages

I'm not sure if this is of interest to Sage but Axiom will soon
replace its hyperdoc documentation with pure AJAX-enabled web pages.

Essentially a copy of Axiom listens on a port and serves web pages.
The web pages use AJAX to communicate with Axiom so it can perform
math "inline" in the documentation. It works well in a standard
Firefox browser provided you have the mathml fonts installed.

Does Sage include some way to (a) start a process to listen
and (b) visit a URL? It seems that both of these tasks should be
trivial in Sage.

\start
Date: Sat, 08 Dec 2007 23:54:45 -0800
From: Ed Borasky
To: Tim Daly
Subject: Re: Interesting quote

Tim Daly wrote:
> Sage hit slashdot (and slashdot it back, I'm sure).
> One anonymous coward posted the following quote which I find
> worth preserving. The Crystal idea is a bit beyond what he's
> thinking but I think he's on the right track.
> 
> 
> I am a mathematician and shelling out a few hundred or even thousand
> bucks for software is not a problem. A problem is that there is that
> there is a gap in tools. There is one tool missing that would make
> math much more accessible. The tool an IDE. Most IDEs that exist for
> witting math are modeled after software development IDEs. But those do
> not at all parallel how mathematicians think or write. We end up with
> a lot of paper and books in higher math (post introductory undergrad
> level) that are written in plain text. Diagrams are very few and
> cross-references are often unintuitive. If there was a tool that
> allowed to write math as easily as code is written in vi (or
> emacs... please wait until Sunday morning for this flame war... that's
> what Sunday mornings are for), to create diagrams as easily as AutoCad
> creates mechanical drawings, that would realize that an item of text
> maybe best served with a commutative diagram (which it would
> immediately offer to draw) and that another part of the text is
> probably a bibliography reference, then math would be developed as
> well as software is.

Well ... maybe the grass is greener on the other side of the street. I 
do both (applied) mathematics and programming, and I don't think the 
"IDE" tools for programming are really as good as this poster thinks 
they are. It may be easy to *write* code with modern editors -- syntax 
coloring, code folding, automatic indentation, integrated debuggers, 
etc., but

1. There are *way* too many programming languages, and more are being 
cut loose every day. I hang out with Ruby programmers, and Ruby is a 
great language. But really now -- Erlang, Haskell, OCaml, Ruby, Factor, 
Java, Python, Perl, PHP -- not to mention C/C++/C#, Fortran, Pascal, 
Ada, Lisp and Scheme.

2. You can make a compiled language that catches lots of bugs at compile 
time and enforces type discipline. The problem is that programmers won't 
use it. Or you can make a dynamically typed interpreted language with 
lots of facilities for meta-programming and "internal domain-specific 
language" creation. The programmers love it but they end up doing 
"test-driven development" because the "compiler", if there even *is* 
one, has no clue whatsoever about what the code does. You have to write 
twice as much code -- a test suite and an application.

> Basically, all the tools out there are still
> trying to give mathematicians the freedom to write anything that would
> write on paper. There is no tool that is really context-aware. If such
> a tool did exist, it would leave all the others in the dust. Cost
> would not matter. It would be to Mathematica what KDE is to Windows
> desktop.

I'm not at all sure about this analogy. I personally don't think the KDE 
desktop is significantly better than the Windows desktop. For that 
matter, I don't really think there's any really outstanding desktop. 
They differ in the amount of eye candy, but most of them are 
customizable to any user's workflow -- and vice versa. :) I used to use 
KDE, but I now use Windowmaker on my Linux boxes.

I've never used Mathematica, but I have used Maple, Derive, Maxima, 
Axiom and Yacas. Axiom is clearly the "highest-level language" among the 
open-source general purpose CAS packages that I've encountered.

> Perhaps, this is too much to ask for. Perhaps, a better start
> would be a language that captured the thought process of writing math
> the way that emacs captured the thought process of witting different
> types of text. And no TeX is not it. TeX only helps to typeset math to
> make it look pretty. It doesn't make witting math on a computer easier
> than writing it by hand.

TeX is a low-level tool. There are two excellent WYSIWYG TeX front-ends, 
TeXmacs and LyX. TeXmacs can, in fact, drive an Axiom (or Maxima or R or 
Scheme or Yacas) session, capturing its input and output in an editable 
document. I'm not sure I want the machine making "suggestions", as this 
poster describes it. I'd much rather have the machine tell me that I've 
done something wrong and refuse to carry it out. That's the way the 
BASIC interpreter worked in the old Sinclair ZX80 -- if you made a 
syntax error typing in the program, the thing just sat there and 
wouldn't let you move on until you fixed it.

In any event, as far as I'm concerned, TeXmacs, LyX, R and Axiom are as 
good as it can get right now -- they work, they have active open source 
communities behind them, and they do what *I* need to get done. They may 
fall flat on their face for theoretical mathematicians -- I'm not one of 
them, so I wouldn't have the faintest idea what their work flows or 
thought processes are.

\start
Date: Sun, 9 Dec 2007 12:22:42 -0600
From: Tim Daly
To: list
Subject: 20071208.01.tpd.patch

This patch is part of the browser-based hyperdoc work.

With this patch three new features are created for AJAX.

1) It is now possible to have an input field that contains lisp code.
   This is useful for calling lisp code underlying Axiom directly.
   For example:

   <input type="submit" id="p3" class="subbut" 
    onclick="lispcall('p3');"
    value="(GETDATABASE '|Matrix| 'CONSTRUCTORMODEMAP)" />

   will essentially perform the Axiom command line

   )lisp (GETDATABASE '|Matrix| 'CONSTRUCTORMODEMAP)


2) It is now possible return the results of a show command. For example:

   <input type="submit" id="p3" class="subbut" 
    onclick="showcall('p3');"
    value=")show Vector" />

   will essentially perform the Axiom command line

   )show Vector

   the output will be displayed inline in the web page. The
   replace-entities code is used to replace special characters with
   their entity values.

3) It is now possible to show hyperdoc pages that show a domain,
   category, or package ala Hyperdoc, although not all of the fields
   are currently displayed. 

   <a href="db.html?Vector">Vector</a>

   will show a new page with the information from various databases.


Tim



=========================================================================
diff --git a/changelog b/changelog
index 23d4812..652e829 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20071208 tpd src/algebra/axserver.spad add makeDBPage, getShow
+20071208 tpd src/interp/http.lisp add replace-entities
 20071206 tpd src/interp/daase.lisp find the right sourcefile (bug 7020)
 20071205 wxh src/algebra/mathml fix empty list on continuedFraction bug (7014)
 20071205 wxh src/algebra/mathml remove code to eat %% (bug 7016)
diff --git a/src/algebra/axserver.spad.pamphlet b/src/algebra/axserver.spad.pamphlet
index ead58da..57ab398 100644
--- a/src/algebra/axserver.spad.pamphlet
+++ b/src/algebra/axserver.spad.pamphlet
@@ -2,7 +2,7 @@
 \usepackage{axiom}
 \begin{document}
 \title{\$SPAD/src/algebra axserver.spad}
-\author{Arthur C. Ralfs}
+\author{Arthur C. Ralfs, Timothy Daly}
 \maketitle
 \begin{abstract}
 The AxiomServer package is designed to provide a web interface
@@ -21,17 +21,35 @@ AxiomServer: public == private where
 
    axServer: (Integer, SExpression->Void) -> Void
    multiServ: SExpression -> Void
+   getDatabase: (String,String) -> String
 
  private == add
 
    getFile: (SExpression,String) -> Void
    getCommand: (SExpression,String) -> Void
+   getDescription: String -> String
+   getLisp: (SExpression,String) -> Void
+   getShow: (SExpression,String) -> Void
    lastStep: () -> String
    lastType: () -> String
    formatMessages: String -> String
+   makeErrorPage: String -> String
+   getSourceFile: (String,String,String) -> String
+   makeDBPage: String -> String
    getContentType: String -> String
+   readTheFile: SExpression -> String 
+   outputToSocket: (SExpression,String,String) -> Void 
 
+   getDatabase(constructor:String, key:String):String ==
+     answer:=string GETDATABASE(INTERN$Lisp constructor,INTERN$Lisp key)$Lisp
+     WriteLine$Lisp concat ["getDatabase: ",constructor," ",key," ",answer]
+     answer
 
+@
+The axServer function handles the socket connection on the given port.
+When it gets a input on the socket it calls the server
+function on the socket input.
+<<package AXSERV AxiomServer>>=
    axServer(port:Integer,serverfunc:SExpression->Void):Void ==
      WriteLine("socketServer")$Lisp
      s := SiSock(port,serverfunc)$Lisp
@@ -44,66 +62,255 @@ AxiomServer: public == private where
          serverfunc(w)
 --        i := 0
 
+@
+The multiServ function parses the socket input.
+It expects either a GET or POST request.
+
+A GET request fetches a new page, calling ``getFile''.
+A POST request starts with 
+\begin{itemize}
+\item ``command='' which expects axiom interpreter commands. 
+       When this is recognized we call the ``getCommand'' function.
+\item ``lispcall='' which expects lisp interpreter input
+       When this is recognized we call the ``getLisp'' function.
+\end{itemize}
+<<package AXSERV AxiomServer>>=
+
    multiServ(s:SExpression):Void ==
-         WriteLine("multiServ begin")$Lisp
-         headers:String := ""
-         char:String
-         -- read in the http headers
-         while (char := STRING(READ_-CHAR_-NO_-HANG(s,NIL$Lisp,'EOF)$Lisp)$Lisp) ^= "EOF" repeat
-             headers := concat [headers,char]
-         sayTeX$Lisp headers
-         StringMatch("([^ ]*)", headers)$Lisp
+     WriteLine("multiServ begin")$Lisp
+     headers:String := ""
+     char:String
+     -- read in the http headers
+     while (char := _
+       STRING(READ_-CHAR_-NO_-HANG(s,NIL$Lisp,'EOF)$Lisp)$Lisp) ^= "EOF"_
+        repeat
+         headers := concat [headers,char]
+     sayTeX$Lisp headers
+     StringMatch("([^ ]*)", headers)$Lisp
+     u:UniversalSegment(Integer)
+     u := segment(MatchBeginning(1)$Lisp+1,_
+                  MatchEnd(1)$Lisp)$UniversalSegment(Integer)
+     reqtype:String := headers.u
+     sayTeX$Lisp  concat ["request type: ",reqtype]
+     if  reqtype = "GET" then
+         StringMatch("GET ([^ ]*)",headers)$Lisp
+         u:UniversalSegment(Integer)
+         u := segment(MatchBeginning(1)$Lisp+1,_
+                      MatchEnd(1)$Lisp)$UniversalSegment(Integer)
+         getFile(s,headers.u)
+     if reqtype = "POST" and StringMatch("command=(.*)$",headers)$Lisp > 0
+      then
+         u:UniversalSegment(Integer)
+         u := segment(MatchBeginning(1)$Lisp+1,_
+                      MatchEnd(1)$Lisp)$UniversalSegment(Integer)
+         getCommand(s,headers.u)
+     if reqtype = "POST" and StringMatch("lispcall=(.*)$",headers)$Lisp > 0
+      then
          u:UniversalSegment(Integer)
-         u := segment(MatchBeginning(1)$Lisp+1,MatchEnd(1)$Lisp)$UniversalSegment(Integer)
-         reqtype:String := headers.u
-         sayTeX$Lisp  concat ["request type: ",reqtype]
-         if  reqtype = "GET" then
-             StringMatch("GET ([^ ]*)",headers)$Lisp
-             u:UniversalSegment(Integer)
-             u := segment(MatchBeginning(1)$Lisp+1,MatchEnd(1)$Lisp)$UniversalSegment(Integer)
-             getFile(s,headers.u)
-         if reqtype = "POST" then
-             StringMatch("command=(.*)$",headers)$Lisp
-             u:UniversalSegment(Integer)
-             u := segment(MatchBeginning(1)$Lisp+1,MatchEnd(1)$Lisp)$UniversalSegment(Integer)
-             getCommand(s,headers.u)
-         WriteLine("multiServ end")$Lisp
-         WriteLine("")$Lisp
+         u := segment(MatchBeginning(1)$Lisp+1,_
+                      MatchEnd(1)$Lisp)$UniversalSegment(Integer)
+         getLisp(s,headers.u)
+     if reqtype = "POST" and StringMatch("showcall=(.*)$",headers)$Lisp > 0
+      then
+         u:UniversalSegment(Integer)
+         u := segment(MatchBeginning(1)$Lisp+1,_
+                      MatchEnd(1)$Lisp)$UniversalSegment(Integer)
+         getShow(s,headers.u)
+     WriteLine("multiServ end")$Lisp
+     WriteLine("")$Lisp
 
+@
+\subsection{getFile}
+Given a socket and the URL of the file we create an input stream 
+that contains the file. If the filename contains a question mark
+then we need to parse the parameters and dynamically construct the
+file contents.
+<<package AXSERV AxiomServer>>=
    getFile(s:SExpression,pathvar:String):Void ==
-       WriteLine("")$Lisp
-       WriteLine("getFile")$Lisp
-       if not null? PATHNAME_-NAME(PATHNAME(pathvar)$Lisp)$Lisp then
-       -- display contents of file
-       --first determine Content-Type from file extension
-           contentType:String := getContentType(pathvar)
-           q:=Open(pathvar)$Lisp
-           if null? q then
-             q := MAKE_-STRING_-INPUT_-STREAM("File doesn't exist")$Lisp
-             WriteLine("File does not exist.")$Lisp
+     WriteLine("")$Lisp
+     WriteLine$Lisp concat ["getFile: ",pathvar]
+     params:=split(pathvar,char "?")
+     if #params = 1 
+      then if not null? PATHNAME_-NAME(PATHNAME(pathvar)$Lisp)$Lisp 
+       then
+         contentType:String := getContentType(pathvar)
+         q:=Open(pathvar)$Lisp
+         if null? q 
+           then
+             q := MAKE_-STRING_-INPUT_-STREAM(_
+                   makeErrorPage("File doesn't exist"))$Lisp
        else
-           q:=MAKE_-STRING_-INPUT_-STREAM("Problem with file path")$Lisp
-       file:String := ""
-       WriteLine("begin reading file")$Lisp
-       r := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp
-       SiCopyStream(q,r)$Lisp
-       filestream:String := GET_-OUTPUT_-STREAM_-STRING(r)$Lisp
-       CLOSE(r)$Lisp
-       CLOSE(q)$Lisp
-       WriteLine("end reading file")$Lisp
-       filelength:String := string(#filestream)
-       file := concat ["Content-Length: ",filelength,STRING(NewLine$Lisp)$Lisp,STRING(NewLine$Lisp)$Lisp,file]
-       file := concat ["Connection: close",STRING(NewLine$Lisp)$Lisp,file]
-       file := concat ["Content-Type: ",contentType,STRING(NewLine$Lisp)$Lisp,file]
-       file := concat ["HTTP/1.1 200 OK",STRING(NewLine$Lisp)$Lisp,file]
-       file := concat [file,filestream]
-       f:=MAKE_-STRING_-INPUT_-STREAM(file)$Lisp
-       SiCopyStream(f,s)$Lisp
-       CLOSE(f)$Lisp
-       CLOSE(s)$Lisp
-       WriteLine("getFile end")$Lisp
-       WriteLine("")$Lisp
+         q:=MAKE_-STRING_-INPUT_-STREAM(_
+             makeErrorPage("Problem with file path"))$Lisp
+      else
+       q:=MAKE_-STRING_-INPUT_-STREAM(makeDBPage(pathvar))$Lisp
+     outputToSocket(s,readTheFile(q),contentType)     
+
+@
+\subsection{makeErrorPage}
+<<package AXSERV AxiomServer>>=
+   makeErrorPage(msg:String):String ==
+     page:String:="<!DOCTYPE html PUBLIC "
+     page:=page "_"-//W3C//DTD XHTML 1.0 Strict//EN_" "
+     page:=page "_"http://www.w3.org/TR/xthml1/DTD/xhtml1-strict.dtd_">"
+     page:=page "<html xmlns=_"http://www.w3.org/1999/xhtml_">"
+     page:=page "<head><title>Error</title></head><body>" msg "</body></html>"
+     WriteLine(page)$Lisp
+     page
+@
+\subsection{getDescription}
+We need to fish around in the data structure to return the piece of 
+documentation for the domain. We have to call the lisp version of
+GETDATABASE because the version above returns a string object. The
+string object is missing quotes and cannot be properly read. So we
+need to get the lisp object and work with it in native form first.
+
+The doc string also contains spad markup which we need to replace with html.
+<<package AXSERV AxiomServer>>=
+   getDescription(dom:String):String ==
+    d:=CADR(CADAR(GETDATABASE(INTERN(dom)$Lisp,'DOCUMENTATION)$Lisp)$Lisp)$Lisp
+    string d
+@
+\subsection{getSourceFile}
+During build we construct a hash table that takes the chunk name as
+the key and returns the filename. We reconstruct the chunk name here
+and do a lookup for the source file.
+<<package AXSERV AxiomServer>>=
+   getSourceFile(constructorkind:String,_
+                 abbreviation:String,_
+                 dom:String):String ==
+     sourcekey:="@<<" constructorkind " " abbreviation " " dom ">>"
+     WriteLine(sourcekey)$Lisp
+     sourcefile:=lowerCase last split(getDatabase(dom,"SOURCEFILE"),char "/") 
+     sourcefile:=sourcefile ".pamphlet"
+
+@
+\subsection{makeDBPage}
+<<package AXSERV AxiomServer>>=
+   makeDBPage(pathvar:String):String ==
+     params:=split(pathvar,char "?")
+     args:=split(params.2, char "&")
+     dom:=args.1
+     domi:=INTERN(dom)$Lisp
+     -- category, domain, or package?
+     constructorkind:=getDatabase(dom,"CONSTRUCTORKIND")
+     abbreviation:=getDatabase(dom, "ABBREVIATION")
+     sourcefile:=getDatabase(dom, "SOURCEFILE")
+     constructorkind.1:=upperCase constructorkind.1
+     description:=getDescription(dom)
+     page:String:="<!DOCTYPE html PUBLIC "
+     page:=page "_"-//W3C//DTD XHTML 1.0 Strict//EN_" "
+     page:=page "_"http://www.w3.org/TR/xthml1/DTD/xhtml1-strict.dtd_">"
+     page:=page "<html xmlns=_"http://www.w3.org/1999/xhtml_">"
+     page:=page "<head>"
+     page:=page "<meta http-equiv=_"Content-Type_" content=_"text/html_"" 
+     page:=page " charset=_"us-ascii_"/>"
+     page:=page "<title>" constructorkind " " dom "</title></head>"
+     page:=page "<style> html { background-color: #FFFF66; } </style>"
+     page:=page "<body>"
+     page:=page "<div align=_"center_">"
+     page:=page "<img align=_"middle_" src=_"doctitle.png_"/></div><hr/>"
+     page:=page "<div align=_"center_">" constructorkind " " dom "</div><hr/>"
+     page:=page "<table>"
+     page:=page "<tr><td valign=_"top_">Description:  </td>"
+     page:=page "<td>" description  "</td></tr>"
+     page:=page "<tr><td>Abbreviation: </td><td>" abbreviation "</td></tr>"
+     page:=page "<tr><td>Source File:  </td><td>" sourcefile   "</td></tr>"
+     page:=page "</table><hr/>"
+     page:=page "<table>"
+     page:=page "<tr>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Ancestors_">Ancestors</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Dependents_">Dependents</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Exports_">Exports</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Parents_">Parents</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Users_">Users</a>"
+     page:=page "</td>"
+     page:=page "</tr>"
+     page:=page "<tr>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Attributes_">Attributes</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Examples_">Examples</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Operations_">Operations</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=SearchPath_">Search Path</a>"
+     page:=page "</td>"
+     page:=page "<td>"
+     page:=page "<a href=_"?" dom "&lookup=Uses_">Uses</a>"
+     page:=page "</td>"
+     page:=page "</tr>"
+     page:=page "</table>"
+     page:=page "</body></html>"
+--     WriteLine(page)$Lisp
+     page
+@
+\subsection{readTheFile}
+We have q which is a stream which contains the file. We read the file
+into a string-stream to get it all into one string. We return the string.
+<<package AXSERV AxiomServer>>=
+   readTheFile(q:SExpression):String ==
+     WriteLine("begin reading file")$Lisp
+     r := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp
+     SiCopyStream(q,r)$Lisp
+     filestream:String := GET_-OUTPUT_-STREAM_-STRING(r)$Lisp
+     CLOSE(r)$Lisp
+     CLOSE(q)$Lisp
+     WriteLine("end reading file")$Lisp
+     filestream
 
+@
+\subsection{outputToSocket}
+We have ``s'' which is the socket, ``filestream'' which is the text of
+the file to output, and ``contentType'' which is the HTML Content-Type.
+We construct the HTML header information according to the standard and
+prepend it to the file. The resulting string is output to the socket.
+<<package AXSERV AxiomServer>>=
+   outputToSocket(s:SExpression,filestream:String,contentType:String):Void ==
+     filelength:String := string(#filestream)
+     file:String := ""
+     nl:String:=STRING(NewLine$Lisp)$Lisp
+     file := concat ["Content-Length: ",filelength,nl,nl,file]
+     file := concat ["Connection: close",nl,file]
+     file := concat ["Content-Type: ",contentType,nl,file]
+     file := concat ["HTTP/1.1 200 OK",nl,file]
+     file := concat [file,filestream]
+     WriteLine(file)$Lisp
+     f:=MAKE_-STRING_-INPUT_-STREAM(file)$Lisp
+     SiCopyStream(f,s)$Lisp
+     CLOSE(f)$Lisp
+     CLOSE(s)$Lisp
+
+@
+\subsection{getCommand}
+The getCommand function is invoked when the HTTP request is a POST
+and contains the string "command". Essentially the game here is
+to rebind the various output streams used by Axiom so we can
+capture the normal output. This function returns a set of HTML 5 div
+blocks:
+\begin{enumerate}
+\item stepnum, the value of lastStep()
+\item command, the value of the  command variable
+\item algebra, the value of the algebra variable
+\item mathml, the value of the mathml variable
+\item type, the value of lastType()
+\end{enumerate}
+The HTML functions in the hyperdoc browser depend on the order
+of these variables so do not change this without changing the
+corresponding functions in the browser HTML.
+<<package AXSERV AxiomServer>>=
    getCommand(s:SExpression,command:String):Void ==
        WriteLine$Lisp concat ["getCommand: ",command]
        SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp
@@ -112,34 +319,32 @@ AxiomServer: public == private where
        SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp
        SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp
        SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp
---      parseAndInterpret$Lisp command
---      parseAndEvalStr$Lisp command
--- The previous two commands don't exit nicely when a syntactically incorrect command is
--- given to them.  They somehow need to be wrapped in CATCH statements but I haven't
--- figured out how to do this.  parseAndEvalToStringEqNum  uses the following CATCH
--- statements to call parseAndEvalStr but when I try these they don't work.  I get a
--- "NIL is not a valid identifier to use in AXIOM" message. Using parseAndEvalToStringEqNum
--- works and doesn't crash on a syntax error.
---        v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr$Lisp command)$Lisp)$Lisp
---        v = 'restart => ['"error"]
        ans := string parseAndEvalToStringEqNum$Lisp command
-       SETQ(resultmathml$Lisp,GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp
-       SETQ(resultalgebra$Lisp,GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp
+       SETQ(resultmathml$Lisp,_
+            GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp
+       SETQ(resultalgebra$Lisp,_
+            GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp
        SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp
        SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp
        CLOSE(tmpmathml$Lisp)$Lisp
        CLOSE(tmpalgebra$Lisp)$Lisp
        -- Since strings returned from axiom are going to be displayed in html I
        -- should really check for the characters &,<,> and replace them with
-       -- &amp;,&lt;,&gt;.  At present I only check for ampersands in formatMessages.
+       -- &amp;,&lt;,&gt;.  
+       -- At present I only check for ampersands in formatMessages.
        mathml:String := string(resultmathml$Lisp)
        algebra:String := string(resultalgebra$Lisp)
        algebra := formatMessages(algebra)
        -- At this point mathml contains the mathml for the output but does not
-       -- include step number or type information.  We should also save the command.
+       -- include step number or type information.  
+       -- We should also save the command.
        -- I get the type and step number from the $internalHistoryTable
---       axans:String := concat ["<div><div class=_"command_">(",lastStep(),") -> ",command,"</div><div class=_"algebra_">",algebra,"</div><div class=_"mathml_">",mathml,"</div><div class=_"type_">Type: ",lastType(),"</div></div>"]
-       axans:String := concat ["<div class=_"stepnum_">", lastStep(), "</div><div class=_"command_">", command, "</div><div class=_"algebra_">",algebra,"</div><div class=_"mathml_">",mathml,"</div><div class=_"type_">",lastType(),"</div>"]       
+       axans:String := _
+         concat ["<div class=_"stepnum_">", lastStep(), "</div>_
+                  <div class=_"command_">", command, "</div>_
+                  <div class=_"algebra_">",algebra,"</div>_
+                  <div class=_"mathml_">",mathml,"</div>_
+                  <div class=_"type_">",lastType(),"</div>"]       
        WriteLine$Lisp concat ["mathml answer: ",mathml]
        WriteLine$Lisp concat ["algebra answer: ",algebra]
        q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp
@@ -148,19 +353,120 @@ AxiomServer: public == private where
        CLOSE(s)$Lisp
 
 
-   lastType():String ==
---  The last history entry is the first item in the $internalHistoryTable list so
---  car(_$internalHistoryTable$Lisp) selects it.  Here's an example:
---  (3 (x+y)**3 (% (value (Polynomial (Integer)) WRAPPED 1 y (3 0 . 1) (2 1 x (1 0 . 3)) (1 1 x (2 0 . 3)) (0 1 x (3 0 . 1)))))
---  This corresponds to the input "(x+y)**3" being issued as the third command after
---  starting axiom.  The following line selects the type information.
-       string car(cdr(car(cdr(car(cdr(cdr(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp
+@
+\subsection{getLisp}
+The getLisp function is invoked when the HTTP request is a POST
+and contains the string "lispcall".
+<<package AXSERV AxiomServer>>=
+   getLisp(s:SExpression,command:String):Void ==
+       WriteLine$Lisp concat ["getLisp: ",command]
+       evalresult:=EVAL(READ_-FROM_-STRING(command)$Lisp)$Lisp
+       mathml:String:=string(evalresult)
+       WriteLine$Lisp concat ["getLisp: after ",mathml]
+       WriteLine$Lisp concat ["getLisp output: ",mathml]
+       SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp
+       SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp
+       SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp
+       SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp
+       SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp
+       SETQ(resultalgebra$Lisp,_
+            GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp
+       SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp
+       SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp
+       CLOSE(tmpalgebra$Lisp)$Lisp
+       -- Since strings returned from axiom are going to be displayed in html I
+       -- should really check for the characters &,<,> and replace them with
+       -- &amp;,&lt;,&gt;.  
+       -- At present I only check for ampersands in formatMessages.
+       algebra:String := string(resultalgebra$Lisp)
+       algebra := formatMessages(algebra)
+       -- At this point mathml contains the mathml for the output but does not
+       -- include step number or type information.  
+       -- We should also save the command.
+       -- I get the type and step number from the $internalHistoryTable
+       axans:String := _
+        concat ["<div class=_"stepnum_">", lastStep(), "</div>_
+                 <div class=_"command_">", command, "</div>_
+                 <div class=_"algebra_">",algebra,"</div>_
+                 <div class=_"mathml_">",mathml,"</div>_
+                 <div class=_"type_">",lastType(),"</div>"]       
+       WriteLine$Lisp concat ["mathml answer: ",mathml]
+       WriteLine$Lisp concat ["algebra answer: ",algebra]
+       q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp
+       SiCopyStream(q,s)$Lisp
+       CLOSE(q)$Lisp
+       CLOSE(s)$Lisp
 
+@
+\subsection{getShow}
+The getShow function is invoked when the HTTP request is a POST
+and contains the string "showcall". The )show command generates
+output to lisp's *standard-output* so we wrap that stream to capture it.
+The resulting string needs to be transformed into html-friendly form.
+This is done in the call to replace-entitites (see http.lisp)
+<<package AXSERV AxiomServer>>=
+   getShow(s:SExpression,showarg:String):Void ==
+       WriteLine$Lisp concat ["getShow: ",showarg]
+       realarg:=SUBSEQ(showarg,6)$Lisp
+       show:=_
+        "(progn (setq |$options| '((|operations|))) (|show| '|" realarg "|))"
+       WriteLine$Lisp concat ["getShow: ",show]
+       SETQ(SAVESTREAM$Lisp,_*STANDARD_-OUTPUT_*$Lisp)$Lisp
+       SETQ(_*STANDARD_-OUTPUT_*$Lisp,_
+             MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp
+       evalresult:=EVAL(READ_-FROM_-STRING(show)$Lisp)$Lisp
+       SETQ(evalresult,_
+             GET_-OUTPUT_-STREAM_-STRING(_*STANDARD_-OUTPUT_*$Lisp)$Lisp)$Lisp
+       SETQ(_*STANDARD_-OUTPUT_*$Lisp,SAVESTREAM$Lisp)$Lisp
+       mathml:String:=string(REPLACE_-ENTITIES(evalresult)$Lisp)
+       SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp
+       SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp
+       SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp
+       SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp
+       SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp
+       SETQ(resultalgebra$Lisp,_
+            GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp
+       SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp
+       SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp
+       CLOSE(tmpalgebra$Lisp)$Lisp
+       -- Since strings returned from axiom are going to be displayed in html I
+       -- should really check for the characters &,<,> and replace them with
+       -- &amp;,&lt;,&gt;.  
+       -- At present I only check for ampersands in formatMessages.
+       algebra:String := string(resultalgebra$Lisp)
+       algebra := formatMessages(algebra)
+       -- At this point mathml contains the mathml for the output but does not
+       -- include step number or type information.  
+       -- We should also save the command.
+       -- I get the type and step number from the $internalHistoryTable
+       axans:String := _
+        concat ["<div class=_"stepnum_">", lastStep(), "</div>_
+                 <div class=_"command_">", showarg, "</div>_
+                 <div class=_"algebra_">",algebra,"</div>_
+                 <div class=_"mathml_">",mathml,"</div>_
+                 <div class=_"type_">",lastType(),"</div>"]       
+       WriteLine$Lisp concat ["mathml answer: ",mathml]
+       q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp
+       SiCopyStream(q,s)$Lisp
+       CLOSE(q)$Lisp
+       CLOSE(s)$Lisp
+
+
+   lastType():String ==
+--  The last history entry is the first item in the $internalHistoryTable 
+--  list so car(_$internalHistoryTable$Lisp) selects it.  Here's an example:
+--  (3 (x+y)**3 (% (value (Polynomial (Integer)) 
+--  WRAPPED 1 y (3 0 . 1) (2 1 x (1 0 . 3)) (1 1 x (2 0 . 3))
+--  (0 1 x (3 0 . 1)))))
+--  This corresponds to the input "(x+y)**3" being issued as the third 
+--  command after starting axiom.  
+-- The following line selects the type information.
+       string car(cdr(car(cdr(car(cdr(cdr(car(_$internalHistoryTable$Lisp)_
+         $Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp
 
    lastStep():String ==
        string car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp
 
-
    formatMessages(str:String):String ==
        WriteLine("formatMessages")$Lisp
        -- I need to replace any ampersands with &amp; and may also need to
@@ -193,7 +499,8 @@ AxiomServer: public == private where
        -- need to test for successful match?
        StringMatch(".*\.(.*)$", pathvar)$Lisp
        u:UniversalSegment(Integer)
-       u := segment(MatchBeginning(1)$Lisp+1,MatchEnd(1)$Lisp)$UniversalSegment(Integer)
+       u := segment(MatchBeginning(1)$Lisp+1,_
+                    MatchEnd(1)$Lisp)$UniversalSegment(Integer)
        extension:String := pathvar.u
        WriteLine$Lisp concat ["file extension: ",extension]
        -- test for extensions: html, htm, xml, xhtml, js, css
diff --git a/src/interp/http.lisp b/src/interp/http.lisp
index 0b264bf..3c217d0 100644
--- a/src/interp/http.lisp
+++ b/src/interp/http.lisp
@@ -45,4 +45,54 @@
 (defun |SiCopyStream| (q s) (si::copy-stream q s))
 
 
+;;; replace-entities is a function that takes a string and 
+;;; returns a new string that has special html entities replaced.
+;;;
+;;; this function is used in axserver.spad to replace characters that
+;;; occur in standard output with characters that the browser needs.
+;;;
+;;; the algorithm constructs a new string by computing the additional
+;;; space needed by the replacement characters, adding that to the
+;;; input string length. Thus the new string is just long enough
+;;; to hold the original string stuffed with expanded entity codes.
+;;;
+;;; at the present time it only looks for and replaces the 
+;;;    <     with &#60;
+;;;  newline with <br/>
+;;;
+;;; to add a new code you must
+;;;  * add a multiple to the resultlen
+;;;      (so if the replacement character is 5 characters long
+;;;       we need to add 4 additional positions, eg. < becomes &#60;)
+;;;  * add a branch to the cond routine to replace the old character
+;;;    with new ones. 
+;;;      (note that you need to increment j, the result string pointer
+;;;       for all but the last character added since the loop handles that)
+;;;
+;;; The result is a new string that is html-entity friendly.
+
+(defun replace-entities (str)
+ (let (resultlen result (strlen (length str)))
+  (setq resultlen 
+   (+ strlen 
+      (* 4 (count #\< str))           ; <       ==> &#60;
+      (* 4 (count #\newline str))))   ; newline ==> <br/>
+  (setq result (make-string resultlen))
+  (do ((i 0 (+ i 1)) (j 0 (+ j 1)))
+      ((= i strlen) result)
+   (cond 
+    ((char= (char str i) #\<)
+     (setf (char result j) #\&) (incf j)
+     (setf (char result j) #\#) (incf j)
+     (setf (char result j) #\6) (incf j)
+     (setf (char result j) #\0) (incf j)
+     (setf (char result j) #\;))
+    ((char= (char str i) #\newline)
+     (setf (char result j) #\<) (incf j)
+     (setf (char result j) #\b) (incf j)
+     (setf (char result j) #\r) (incf j)
+     (setf (char result j) #\/) (incf j)
+     (setf (char result j) #\>))
+    (t
+     (setf (char result j) (char str i)))))))
 
\start
Date: Sun, 9 Dec 2007 12:42:27 -0600
From: Tim Daly
To: William Stein, David Joyner, Bill Page
Subject: Axiom and Sage

Having downloaded the Sage vmware image and done a 
package-install('axiom4sage...') I find that Sage is
not running Axiom but Fricas, which is a fork. That's
fine but I'd appreciate it if you be specific that 
you're using Fricas, not Axiom. They are separate
projects and I don't want the confusion that will
occur if we're not precise in the use of the names.

The Axiom code base and project goals are different
from the Fricas code base and project goals. While
we cooperate on various things they are not the same.

Please use the name "Axiom"  when using Axiom in Sage
and "Fricas" when using Fricas in Sage. 

\start
Date: Sun, 9 Dec 2007 11:01:35 -0800
From: William Stein
To: Tim Daly
Subject: Re: Axiom and Sage
Cc: David Joyner

On Dec 9, 2007 10:42 AM,  Tim Daly wrote:
> Having downloaded the Sage vmware image and done a
> package-install('axiom4sage...') I find that Sage is
> not running Axiom but Fricas, which is a fork. That's
> fine but I'd appreciate it if you be specific that
> you're using Fricas, not Axiom. They are separate
> projects and I don't want the confusion that will
> occur if we're not precise in the use of the names.

OK.  If you look now at

   http://sagemath.org/packages/optional/

you'll see the package is called fricas-0.3.1.spkg so users
install it by doing

   sage -i fricas-0.3.1

The main plus of this packaging for sage is that it builds from
source quickly (in a few minutes) using precompiled clisp files.

Let me know if any other issues arise with Sage.

 -- William

> The Axiom code base and project goals are different
> from the Fricas code base and project goals. While
> we cooperate on various things they are not the same.
>
> Please use the name "Axiom"  when using Axiom in Sage
> and "Fricas" when using Fricas in Sage.

\start
Date: Sun, 9 Dec 2007 16:00:23 -0500
From: Tim Daly
To: William Stein
Subject: Re: Axiom and Sage
Cc: Arthur Ralfs, David Joyner

>The main plus of this packaging for sage is that it builds from
>source quickly (in a few minutes) using precompiled clisp files.

Well, on my 2Ghz machine with 2 Gig of memory running VMWare and
using the sage vmware image (but upgrading the VM to have 1G memory)
I started the package-install at 3:30am this morning. It is now
2:10pm and the build is still "in-process". They are heavy things,
your minutes :-)

Likely a portion of the problem is due to starting the package-install
from the notebook. I'm running native windows and sage in the VM and
connecting thru the browser. 

I suspect a lot of CPU is going into running jsMath to redraw the
output page. The Fricas build has a lot of output (which could be
suppressed during package-install) and jsMath is not fast. Axiom
has a NOISE variable in the Makefiles to suppress most output.

You might consider a note suggesting that installs be done from
inside the virtual machine rather than thru the notebook interface.
I didn't realize that package-install was going to try a dynamic 
fetch and build. Shipping an Axiom source tarball would be faster
and cheaper.




Three other semi-related comments...

Re: Lisp builds: Axiom is designed to be constructed directly "from
the lisp" by shipping the pre-built "int" directory which caches all
possible machine-generated, system-independent work during builds. 
This was used to minimize build times on 6 megahertz machines. 
Fricas uses a different build mechanism so I'm not sure what
Waldek does.  I'll check to see if Axiom's mechanism has any bugs
since I don't use it regularly despite the design point.

Re: jsMath: I started using jsMath but Arthur Ralfs modified Axiom to
output mathML directly (using )set out mathml). All Axiom needs is a
mathml enabled browser with the correct fonts. I found that this is
very much faster and lighter-weight than jsMath. The browser has
machine code to handle mathml but jsMath is interpreted. You might
want to reconsider this design decision because it will impact the
long term speed of your notebooks. Arthur (copied on this email)
might be able to give some advice.

Re: Source Code Control: On a more religious note, it appears the
package was downloaded from a mercurial repository (asssuming I
understood correctly). After trying many of the repo software packages
(cvs, svn, darcs, arch, sourcesafe, but not mercurial) I find that git
is blindingly faster than anything else. Git is so fast that when I
first started using it I used to refetch the sources to make sure it
actually worked.  Axiom uses Arch, CVS, SVN, and git but I shadow the
other systems from the git master. Git has changed the way I work which
is not something that happens often, given that I'm an old curmudgeon.

\start
Date: Sun, 9 Dec 2007 12:25:44 -0800
From: William Stein
To: Tim Daly, David Joyner, Bill Page, Arthur Ralfs
Subject: Re: Axiom and Sage

On Dec 9, 2007 1:00 PM, Tim Daly wrote:
> >The main plus of this packaging for sage is that it builds from
> >source quickly (in a few minutes) using precompiled clisp files.
>
> Well, on my 2Ghz machine with 2 Gig of memory running VMWare and
> using the sage vmware image (but upgrading the VM to have 1G memory)
> I started the package-install at 3:30am this morning. It is now
> 2:10pm and the build is still "in-process". They are heavy things,
> your minutes :-)

On a 1.8Ghz opteron (sagemath.org) it takes 18 minutes (I just tested
the install).   So it taking longer is a bug.  Thanks for reporting
the problem.
This is now
   http://trac.sagemath.org/sage_trac/ticket/1439

> Likely a portion of the problem is due to starting the package-install
> from the notebook. I'm running native windows and sage in the VM and
> connecting thru the browser.

That is very likely the problem.  The output of installing packages through
the notebook is way too verbose, so this is in fact a likely source of
the problem (which could be remedied).   Better would be to login as "manage",
do "sudo su" (password sage), then type "sage -i fricas-0.3.1".

> I suspect a lot of CPU is going into running jsMath to redraw the
> output page. The Fricas build has a lot of output (which could be
> suppressed during package-install) and jsMath is not fast. Axiom

jsmath isn't likely not relevant -- the output of the fricas build has
nothing to do with jsmath...

> has a NOISE variable in the Makefiles to suppress most output.

Excellent.

> You might consider a note suggesting that installs be done from
> inside the virtual machine rather than thru the notebook interface.

Even better would be to fix things so they work through the notebook well.

    http://trac.sagemath.org/sage_trac/ticket/1439

> I didn't realize that package-install was going to try a dynamic
> fetch and build. Shipping an Axiom source tarball would be faster
> and cheaper.

<joke> Would you give me a special software-developer's discount :-) </joke>

> Three other semi-related comments...
>
> Re: Lisp builds: Axiom is designed to be constructed directly "from
> the lisp" by shipping the pre-built "int" directory which caches all
> possible machine-generated, system-independent work during builds.
> This was used to minimize build times on 6 megahertz machines.
> Fricas uses a different build mechanism so I'm not sure what
> Waldek does.  I'll check to see if Axiom's mechanism has any bugs
> since I don't use it regularly despite the design point.

Let me know.

> Re: jsMath: I started using jsMath but Arthur Ralfs modified Axiom to
> output mathML directly (using )set out mathml). All Axiom needs is a
> mathml enabled browser with the correct fonts. I found that this is
> very much faster and lighter-weight than jsMath. The browser has
> machine code to handle mathml but jsMath is interpreted. You might
> want to reconsider this design decision because it will impact the
> long term speed of your notebooks. Arthur (copied on this email)
> might be able to give some advice.

Two points:
  (1) "All Axiom needs is a mathml enabled browser with the correct fonts."
   This is a nontrivial assumption to make. E.g., I have this on none of
my web browsers and mathml doesn't ship with browsers yet.
Of course, I can't see any reason for somebody to not develop
this for Sage as an option (that the user could configure in their sage notebook
preferences panel -- which doesn't exist yet).  One would use
some sort of latex --> mathml converter probably.
  (2) jsmath looks identical to tex, since it is 100% implementation of the
tex layout engine.  I don't think the same is true of mathml plugins,
i.e., mathml
doesn't look as good to me.

> Re: Source Code Control: On a more religious note, it appears the
> package was downloaded from a mercurial repository (asssuming I
> understood correctly).
> After trying many of the repo software packages
> (cvs, svn, darcs, arch, sourcesafe, but not mercurial) I find that git
> is blindingly faster than anything else. Git is so fast that when I
> first started using it I used to refetch the sources to make sure it
> actually worked.  Axiom uses Arch, CVS, SVN, and git but I shadow the
> other systems from the git master. Git has changed the way I work which
> is not something that happens often, given that I'm an old curmudgeon.

Mercurial is in some cases faster than GIT and other cases slower.
See this page on the GIT website (hence possibly skewed in their favor):

   http://git.or.cz/gitwiki/GitBenchmarks

In any case, Mercurial is plenty fast for the needs of Sage, and the code
of mercurial is easy to read and understand if need be.

\start
Date: Sun, 09 Dec 2007 15:39:31 -0800
From: Arthur Ralfs
To: list
Subject: re: Axiom and Sage

William Stein wrote:
> Two points:
>   (1) "All Axiom needs is a mathml enabled browser with the correct fonts."
>    This is a nontrivial assumption to make. E.g., I have this on none of
> my web browsers and mathml doesn't ship with browsers yet.
   
Mathml ships with Firefox although you have to install some extra
fonts to get it to render properly.  There has been some discussion
recently about the STIXfonts on the mozilla mathml mailing list.
Possibly in the near future it won't be necessary to install extra
fonts.

\start
Date: Sun, 09 Dec 2007 18:57:38 -0800
From: Ed Borasky
To: Tim Daly
Subject: re: Axiom and Sage
Cc: William Stein, David Joyner, Arthur Ralfs

root wrote:
>> The main plus of this packaging for sage is that it builds from
>> source quickly (in a few minutes) using precompiled clisp files.
> 
> Well, on my 2Ghz machine with 2 Gig of memory running VMWare and
> using the sage vmware image (but upgrading the VM to have 1G memory)
> I started the package-install at 3:30am this morning. It is now
> 2:10pm and the build is still "in-process". They are heavy things,
> your minutes :-)

UH ... before we go hunting for Fricas performance issues in the build, 
let's make sure we aren't experiencing a VMware performance issue. :)

1. What version of VMware are you running?
2. Is the/are the virtual disk(s) de-fragmented?
3. What's your host, and what does your host's "native" performance 
monitor tool (Task Manager on Windows or "top" on Linux) show the 
virtual machine is doing? You'll see a process at the top of the list 
named something like "vmware-vmx".

\start
Date: Mon, 10 Dec 2007 04:53:12 +0100 (CET)
From: Waldek Hebisch
To: Tim Daly
Subject: re: Axiom and Sage
Cc: William Stein, David Joyner

Tim Daly wote:
> >The main plus of this packaging for sage is that it builds from
> >source quickly (in a few minutes) using precompiled clisp files.
> 
> Well, on my 2Ghz machine with 2 Gig of memory running VMWare and
> using the sage vmware image (but upgrading the VM to have 1G memory)
> I started the package-install at 3:30am this morning. It is now
> 2:10pm and the build is still "in-process". They are heavy things,
> your minutes :-)
> 

Tim, do you have a large lisp subdirectory tree in your home
directory?  By default clisp tries to load lisp files from
this directory -- it this directory is large search can take
a lot of time.  On Linux I had gcl sources in ~/lisp directory
-- clisp needed about 0.5 second on startup to scan the whole
tree.  Given that FriCAS build starts clisp about 1200 times
that add to few minutes.  If you have larger ~/lisp tree or
if VMWare filesystem is slower you will observe much larger
startup times.

This clisp behaviour can be disabled (and newer versions of
FriCAS do this), but IIRC the current Sage package uses
old FriCAS version which has this problem.

\start
Date: Mon, 10 Dec 2007 00:49:31 -0600
From: Tim Daly
To: William Stein, Waldek Hebisch
Subject: Axiom and Sage

Well,per your request, I logged in to the Sage VM and did
  sage -f fricas-0.3.1
simply hangs. However,
  sage -f axiom4sage-0.3.1
succeeds and shows a total time of 
  real 18m42
or, if I include network time
  real 19.6
which is about the wall-clock time.

So there appears to be a suggestion that it might
be a good idea to do package installs directly rather
than thru the notebook interface. Potentially this
could be due to the large amount of screen output.

Apparently the package rename didn't work.

\start
Date: 10 Dec 2007 08:25:00 +0100
From: Martin Rubey
To: William Stein
Subject: re: Axiom and Sage
Cc: Arthur Ralfs, David Joyner

William Stein writes:

>   (2) jsmath looks identical to tex, since it is 100% implementation of the
> tex layout engine.

I do not think that the latter is true.  However, what I know is, that it uses
the TeX fonts.

On the other hand, there is tex4ht, which is capable of producing html
specially prepared for jsmath rendering.

I used it to demonstrate that Axioms current documentation (which is written in
a subset/variant of LaTeX) can be brought to the browser directly.  As far as I
know, Tim et al. rewrote the documentation into html by hand.

\start
Date: Sun, 9 Dec 2007 23:32:52 -0800
From: William Stein
To: Martin Rubey
Subject: re: Axiom and Sage
Cc: Arthur Ralfs, David Joyner

On 10 Dec 2007 08:25:00 +0100, Martin Rubey wrote:
> William Stein writes:
>
> >   (2) jsmath looks identical to tex, since it is 100% implementation of the
> > tex layout engine.
>
> I do not think that the latter is true.

I should clarify what I meant -- it is an implementation of the TeX
*Equation* layout engine, not the text part -- it's only for formulas.

> However, what I know is, that it uses
> the TeX fonts.

It does allow one to use computer modern fonts (120K) if available; otherwise
it uses unicode.  It can also use server-side bitmaped fonts.

> On the other hand, there is tex4ht, which is capable of producing html
> specially prepared for jsmath rendering.

That sounds cool and potentially very useful in order to attempt to
avoid latex2html.

> I used it to demonstrate that Axioms current documentation (which is
> written in a subset/variant of LaTeX) can be brought to the browser
> directly.  As far as I know, Tim et al. rewrote the documentation
> into html by hand.

\start
Date: 10 Dec 2007 08:42:55 +0100
From: Martin Rubey
To: William Stein
Subject: re: Axiom and Sage
Cc: Arthur Ralfs, David Joyner

William Stein writes:

> On 10 Dec 2007 08:25:00 +0100, Martin Rubey wrote:
> > William Stein writes:
> >
> > >   (2) jsmath looks identical to tex, since it is 100% implementation of the
> > > tex layout engine.
> >
> > I do not think that the latter is true.
> 
> I should clarify what I meant -- it is an implementation of the TeX
> *Equation* layout engine, not the text part -- it's only for formulas.

are you sure? Does jsmath really implement TeX math mode? I.e., if I write a
nifty macro, and use it in math mode, will jsmath be able to handle it?

> > However, what I know is, that it uses the TeX fonts.
> 
> It does allow one to use computer modern fonts (120K) if available; otherwise
> it uses unicode.  It can also use server-side bitmaped fonts.

Yes.

> > On the other hand, there is tex4ht, which is capable of producing html
> > specially prepared for jsmath rendering.
> 
> That sounds cool and potentially very useful in order to attempt to avoid
> latex2html.

It is *very* cool.  What I like most about it, it uses TeX itself as
typesetting engine.  I.e., no matter how obscure your macro, it will be able to
handle it, since it doesn't handle it itself :-)

Moreover, it is able to produce a wide range of output: html+pictures,
html+jsmath, mathml, whatever.

I guess, however, that there is a speed penalty.  My idea of using it was to
have all the documentation written in LaTeX, transform it with tex4ht at build
time or when needed, and cache it.

\start
Date: Mon, 10 Dec 2007 21:51:25 +0100
From: Ondrej Certik
To: Tim Daly
Subject: Re: 3D graphics in Sage
Cc: William Stein

On Dec 9, 2007 3:57 AM,  Tim Daly wrote:
> William,
>
> Axiom includes a standalone, 2D and 3D graphics program. The program
> can be used independently from Axiom or directly inside Axiom. It
> pops up a separate window normally so you can manipulate the output
> (shade, rotate, etc). The program is capable of writing postscript
> output. You can also create the postscript programatically so it
> would be possible to embed the 3D postscript output in a Sage session.
>
> I can give you more information if you are interested.


I'd be interested, since we have it too in SymPy - we use pyglet:

http://www.pyglet.org/

it's a pure python library for 3D things, works on windows, mac os,
linux and then our scripts to do nice 3D plots.

Is there some page of the 3D plotting in Axiom? Is there some release
of the program?

Ondrej

\start
Date: Mon, 10 Dec 2007 17:19:34 -0500
From: Tim Daly
To: list
Subject: Re: [sage-devel] Re: Fwd: SAGE

>Re-reading Tim's post I think you're right, and that I misunderstood
>what Tim was writing.  I certainly agree that it's important to do the
>"boring" stuff, though I think the best strategy is to find people for whom
>the boring things are NOT boring, e.g., you cite doing releases as
>boring, but I assure you certain people -- e.g., Michael Abshoff --
>find them to be extremely exciting "I was born to do releases", he
>said in irc yesterday; and documentation, that may be boring to
>you, but David Joyner passionately loves writing good documentation,
>and I've seen other people, e.g., Emily Kirkman put quite a bit of
>passion into creating various nice docs for Sage.

Ah, documentation. Axiom has the "30 year horizon" view and one of 
the critical points is that the mathematics needs to be documented
(literate programs, ala Knuth is our choice). I see a lot of python
code that I can reach with 
  foo??
but it seems to have 2 flaws. The first is that I don't see any
documentation of the mathematics or the algorithms except for the code
(THIS is computational mathematics?). The second is that a lot of the
code I've looked at is simply cover functions for other, undocumented
code (e.g. set up the parms and call pari).

Coming back to my original point, the mathematicians don't feel it
is THEIR job to document their mathematics or their code. If you're
lucky (and it is poor luck anyway) you might find a reference to a
published paper. However, the paper does not describe the implementation,
it is likely published in a pay-per-use publication, and it has the
copyright tied up so nobody can use it to document the code. The
academic mathematician, having gotten his "publish", gives the code
away. Many years later nobody has a clue why it works or doesn't work.
How can we expect to maintain and extend such code in 30 years?

We need to raise the level of quality for computational mathematics
so that we EXPECT a computational mathematician to fully document the
mathematics and the source code. We need to create the expectation 
that the documentation IS part of the JOB. This isn't a job "for
somebody else". And it is critical to the long term success of the
project.

And we won't even mention regression test cases, identifying boundary
conditions, estimating the time and space complexity, or any of the
other primary tasks of computational mathematics.

If the mathematics isn't documented then the job falls on your desk.
Good luck with that.

\start
Date: Wed, 12 Dec 2007 05:06:17 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Building silver git tree on Gentoo

Hi all.  I just tried building the silver tree on Gentoo,and ran into
the following:

32 making
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/graph
/view2d/write2d.o from
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/int
/graph/view2d/write2d.c
34 linking
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/mnt/gentoo/lib/
view2d
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/graph/gdraws/gf
un.o: In function `PSInit':
gfun.c:(.text+0x22f5): warning: the use of `tmpnam' is dangerous,
better use `mk
stemp'
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/graph/gdraws/gf
un.o: In function `PSGlobalInit':
gfun.c:(.text+0xce2): warning: the use of `tempnam' is dangerous,
better use `mk
stemp'
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/lib/pixmap.o:
I
n function `read_pixmap_file':
pixmap.c:(.text+0xd7): undefined reference to `XpmReadFileToImage'
/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/lib/pixmap.o:
I
n function `write_pixmap_file':
pixmap.c:(.text+0x6d): undefined reference to `XpmWriteFileFromImage'
collect2: ld returned 1 exit status
make[4]: ***
[/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/mnt/gentoo/l
ib/view2d] Error 1
make[4]: Leaving directory
`/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
e/src/graph/view2d'
make[3]: *** [view2ddir] Error 2
make[3]: Leaving directory
`/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
e/src/graph'
make[2]: *** [graphdir] Error 2
make[2]: Leaving directory
`/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
e/src'
make[1]: *** [srcdir] Error 2
make[1]: Leaving directory
`/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
e'
make: *** [all] Error 2

xpm.h is in /usr/include/X11/xpm.h, and the libs themselves are:
/usr/lib/libXpm.a
/usr/lib/libXpm.la
/usr/lib/libXpm.so -> libXpm.so.4.11.0
/usr/lib/libXpm.so.4 -> libXpm.so.4.11.0
/usr/lib/libXpm.so.4.11.0

\start
Date: Wed, 12 Dec 2007 06:49:28 -0800
From: Ed Borasky
To: Cliff Yapp
Subject: Re: Building silver git tree on Gentoo recognized.
Cc: list

C Y wrote:
> Hi all.  I just tried building the silver tree on Gentoo,and ran into
> the following:
> 
> 32 making
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/graph
> /view2d/write2d.o from
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/int
> /graph/view2d/write2d.c
> 34 linking
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/mnt/gentoo/lib/
> view2d
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/graph/gdraws/gf
> un.o: In function `PSInit':
> gfun.c:(.text+0x22f5): warning: the use of `tmpnam' is dangerous,
> better use `mk
> stemp'
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/graph/gdraws/gf
> un.o: In function `PSGlobalInit':
> gfun.c:(.text+0xce2): warning: the use of `tempnam' is dangerous,
> better use `mk
> stemp'
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/lib/pixmap.o:
> I
> n function `read_pixmap_file':
> pixmap.c:(.text+0xd7): undefined reference to `XpmReadFileToImage'
> /home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/obj/gentoo/lib/pixmap.o:
> I
> n function `write_pixmap_file':
> pixmap.c:(.text+0x6d): undefined reference to `XpmWriteFileFromImage'
> collect2: ld returned 1 exit status
> make[4]: ***
> [/home/cyapp/mathtoplevel/axiomtoplevel/silver-compile/mnt/gentoo/l
> ib/view2d] Error 1
> make[4]: Leaving directory
> `/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
> e/src/graph/view2d'
> make[3]: *** [view2ddir] Error 2
> make[3]: Leaving directory
> `/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
> e/src/graph'
> make[2]: *** [graphdir] Error 2
> make[2]: Leaving directory
> `/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
> e/src'
> make[1]: *** [srcdir] Error 2
> make[1]: Leaving directory
> `/home/cyapp/mathtoplevel/axiomtoplevel/silver-compil
> e'
> make: *** [all] Error 2
> 
> xpm.h is in /usr/include/X11/xpm.h, and the libs themselves are:
> /usr/lib/libXpm.a
> /usr/lib/libXpm.la
> /usr/lib/libXpm.so -> libXpm.so.4.11.0
> /usr/lib/libXpm.so.4 -> libXpm.so.4.11.0
> /usr/lib/libXpm.so.4.11.0
> 

Thanks for reminding me -- now that there are actual tarballs, I need to 
bug the Gentoo folks about updating the ebuild -- they're still running 
from the September 2005 tarball!

I haven't attempted a "silver" build recently on my Gentoo systems, so I 
don't know if I'd run into the same thing. I think I saw an xorg-server 
update go by not too long ago -- maybe something moved??

I'll see if I can reproduce this.

\start
Date: Wed, 12 Dec 2007 20:27:08 -0500
From: Bill Page
To: Martin Rubey
Subject: Re: Close Issues -> Close Fricas Issues

On 12 Dec 2007 20:47:50 +0100, Martin Rubey wrote:
>
> since FriCAS is progressing quite rapidly what concerns closing
> issues, how shall we proceed on issuetracker?

http://axiom-wiki.newsynthesis.org/IssueTracker

>
> I see two possibilities:
>
> 1) Since MathAction runs FriCAS, and FriCAS applies patches
>     from open-axiom and axiom relatively quickly, we close those
>     issues that are fixed in FriCAS.
>

No, I do not think that is a good idea. I would like the new
axiom-wiki to continue to serve the needs of all of the Axiom-related
projects.

> 2) By magic, or Bill Page, we introduce the possibility of closing
>     issues for any subset of {axiom, open-axiom, fricas}.  I have
>     no idea how that could work, however.  In particular, if one
>     selects "open issues", what subset of issues does he get then?
>

No, I think that is too complicated. What I would like to do is to
have bug reports that are specific to each version/fork. Right now
this is not the case. But what I think we should do as issues are
reviews and/or closed in a particular system, and if the issue is
still outstanding in one or more of the other systems, I think we
should clone the bug reports (make copies for each system) and then
close the ones where the bug is fixed. I know that this might seem
like extra work, but copying these reports is really pretty easy just
using cut-and-paste in edit mode.

> (I see, you are experimenting with running all axioms on
> MathAction?)
>

Yes, I have a preliminary version of the axiom-wiki installed at
newsynthesis.org (aka. sage.math) that does support all three
versions/forks of axiom. This is easily expanded and configured
if/when more versions become available. Right now only the FriCAS
version supports Aldor.

The way I choose to do this in the end was to make it possible to
specify which version/fork of Axiom is to be used on a particular web
page. More than one version/fork of Axiom *cannot* be mixed on the
same page. Although this may not be quite as flexible as we might have
wished, I think it will help to keep things simple.

You can select the version/fork of Axiom that you want to use for the
computation on a page in the 'edit' window and on the IssueTracker bug
report form.

You might also notice that I have made some significant changes to the
navigation on the axiom-wiki website. There is a topics list on the
lefthand side and there are hierachy/ontology navigation arrows
available at the top of the page. I would be quite interested to hear
opinions about these new features at:

http://axiom-wiki.newsynthesis.org

As usual, there remains a lot of work to do to update the axiom-wiki.
I would like to encourage anyone who has some motivations to improve
this site to "jump in" and make a contribution!

\start
Date: Wed, 12 Dec 2007 18:20:43 -0800 (PST)
From: Cliff Yapp
To: Cliff Yapp
Subject: Re: Building silver git tree on Gentoo

OK, it looks like inserting -lXpm into a couple make files did it - I'm
not sure yet however where the "correct" place in the Gentoo makefiles
to add that section is.

\start
Date: Wed, 12 Dec 2007 19:13:58 -0800
From: Ed Borasky
To: Cliff Yapp
Subject: Re: Building silver git tree on Gentoo	recognized.

C Y wrote:
> OK, it looks like inserting -lXpm into a couple make files did it - I'm
> not sure yet however where the "correct" place in the Gentoo makefiles
> to add that section is.

I just got home from work. I started mine up before I left and it 
compiled and installed flawlessly with no changes other than setting the 
gcl version to 2.6.7 in the top-level Makefile. I do this mostly because 
I haven't been able to get any of the 2.6.8 versions to build on my 
64-bit system and don't want different versions.

I get my source from SVN rather than GIT -- could that be making mine 
work? The last five changes in the changelog are

20071208 tpd src/algebra/axserver.spad add makeDBPage, getShow
20071208 tpd src/interp/http.lisp add replace-entities
20071206 tpd src/interp/daase.lisp find the right sourcefile (bug 7020)
20071205 wxh src/algebra/mathml fix empty list on continuedFraction bug 
(7014)
20071205 wxh src/algebra/mathml remove code to eat %% (bug 7016)

If you want, I'll do an "emerge info" and send you the results off list 
  -- no point in putting to much Gentoo-ism into the list. :)

On a totally unrelated note -- what's the lightest-weight open source 
CAS that will do differentiation and high-school-level integration? I'm 
getting one of those Give One Get One laptops from the One Laptop Per 
Child organization and I want to put a CAS on it. I know Maxima will 
work, so unless there's something lighter, that's what I'm going with.

\start
Date: Wed, 12 Dec 2007 22:34:11 -0500
From: Cliff Yapp
To: Tim Daly
Subject: Re: newhyper.pamphlet

Tim I'm not seeing this in the silver git repository - is it in there
yet or do I need to grab it elsewhere?

Thanks,
Cliff   (sorry I must have missed the "where to get it" part...)

Tim Daly wrote:
> Revision 50 checked in.
>  Topics->Calculus complete
>  <pre> is now a better font size
> 

\start
Date: Thu, 13 Dec 2007 00:24:47 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: Building silver git tree on Gentoo

Please send me a diff-Naur of the change for gentoo.

\start
Date: Thu, 13 Dec 2007 00:29:27 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: newhyper.pamphlet

Cliff,

>Tim I'm not seeing this in the silver git repository - is it in there
>yet or do I need to grab it elsewhere?
>
>Thanks,
>Cliff   (sorry I must have missed the "where to get it" part...)
>
>Tim Daly wrote:
>> Revision 50 checked in.
>>  Topics->Calculus complete
>>  <pre> is now a better font size
>> 
>> Tim

This work has been going on in the doyen repo. 

I'm in the process of integrating it all into the latest build.
Once that completes and is tested all you will have to do is 
start axiom, type
   )browse
and you should be able to go to http://127.0.0.1:8085/rootpage.xhtml
and see the new hyperdoc in firefox.

Detailed instructions will be included when the patches hit silver.

\start
Date: 13 Dec 2007 08:08:05 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: Close Issues -> Close Fricas Issues

Bill Page writes:

> > I see two possibilities:
> >
> > 1) Since MathAction runs FriCAS, and FriCAS applies patches
> >     from open-axiom and axiom relatively quickly, we close those
> >     issues that are fixed in FriCAS.
> >
> 
> No, I do not think that is a good idea. I would like the new
> axiom-wiki to continue to serve the needs of all of the Axiom-related
> projects.

OK

> > 2) By magic, or Bill Page, we introduce the possibility of closing
> >     issues for any subset of {axiom, open-axiom, fricas}.  I have
> >     no idea how that could work, however.  In particular, if one
> >     selects "open issues", what subset of issues does he get then?
> >
> 
> No, I think that is too complicated. What I would like to do is to have bug
> reports that are specific to each version/fork. Right now this is not the
> case. But what I think we should do as issues are reviews and/or closed in a
> particular system, and if the issue is still outstanding in one or more of
> the other systems, I think we should clone the bug reports (make copies for
> each system) and then close the ones where the bug is fixed. I know that this
> might seem like extra work, but copying these reports is really pretty easy
> just using cut-and-paste in edit mode.

I disagree.  Most bug reports will relate to the algebra, and thus affect all
versions of axiom.  Cloning all these reports means duplicate effort.

I guess the simplest solution is to replace the "status" categories as follows:

open   ... open in all versions
closed ... closed in all versions

closed in FriCAS
closed in OpenAxiom
closed in Axiom

open in FriCAS  --- closed in Axiom and OpenAxiom
open in OpenAxiom
open in Axiom

many of the others are not needed or could be merged:

assigned, revised, postponed -> not needed

pending, planned, testing -> merge with fix proposed

not reproducible, need more info -> merge

I think that would be much better organized.
\start
Date: Thu, 13 Dec 2007 02:34:01 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: Re: Building silver git tree on Gentoo

I think this is what did it - I'm rebuilding to confirm.

CY

diff -Naur silver/src/graph/view2d/Makefile.pamphlet
silver-compile/src/graph/view2d/Makefile.pamphlet
--- silver/src/graph/view2d/Makefile.pamphlet   2007-12-11
23:08:32.000000000 -0500
+++ silver-compile/src/graph/view2d/Makefile.pamphlet   2007-12-13
05:25:10.000000000 -0500
@@ -24,7 +24,7 @@
 # global include files shared by everyone
 GINC=  ${SRC}/include
 
-LDFLAGS = ${LDF} ${STATIC} -lX11 -lm ${LDF}
+LDFLAGS = ${LDF} ${STATIC} -lX11 -lXpm -lm ${LDF}
 
 @
 \section{view2d code}
diff -Naur silver/src/hyper/Makefile.pamphlet
silver-compile/src/hyper/Makefile.pamphlet
--- silver/src/hyper/Makefile.pamphlet  2007-12-11 23:08:32.000000000
-0500
+++ silver-compile/src/hyper/Makefile.pamphlet  2007-12-13
05:25:50.000000000 -0500
@@ -37,7 +37,7 @@
 HYPER=${MNT}/${SYS}/doc/hypertex
 
 CFLAGS=        ${CCF} -I${MID}
-LDFLAGS= -L${LIB} -lspad ${LDF}
+LDFLAGS= -L${LIB} -lXpm -lspad ${LDF}
 
 HTADD=${OUT}/htadd

\start
Date: Thu, 13 Dec 2007 20:41:33 +0100
From: Gregory Vanuxem
To: list
Subject: A small error in discardGraph()

Hello,

Here is a patchlet that needs to be reviewed. It fixes a bug in the
function 'discardGraph' (src/graph/viewman/makeGraph.c). This bug is
triggered when closing a view2D window [see the end of this email].

@@ -144,7 +144,7 @@

   for (j=0, pL=theGraph->listOfListsOfPoints;
        j<theGraph->numberOfLists; j++,pL++)
     free(pL->listOfPoints);
-  free(pL);
+  free(theGraph->listOfListsOfPoints);
   free(theGraph);

}

Nothing more to say than it uses the correct pointer to free the array.
See the beginning of src/graph/viewman/makeGraph.c for the memory
allocation and src/graph/include/view2D.h for the structure
declarations.

Greg


=====================================================================

1-> draw(sin(x),x=-%pi..%pi)

close the 2D graphic window =>

*** glibc detected
*** /usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman:
munmap_chunk(): invalid pointer: 0x000000000060b0d0 ***
======= Backtrace: =========
/lib/libc.so.6(cfree+0x1b6)[0x2b0346291d06]
/usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman[0x40334e]
/usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman[0x401786]
/usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman[0x4017d8]
/usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman[0x4039b9]
/lib/libc.so.6(__libc_start_main+0xf4)[0x2b03462381c4]
/usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman[0x401579]
======= Memory map: ========
00400000-00409000 r-xp 00000000 08:06
607870                             /usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman
00608000-00609000 rw-p 00008000 08:06
607870                             /usr/local/FriCAS/target/x86_64-unknown-linux/lib/viewman
00609000-0062c000 rw-p 00609000 00:00 0
[heap]
2b03455bb000-2b03455d8000 r-xp 00000000 08:06
4693820                    /lib/ld-2.7.so
2b03455d8000-2b03455db000 rw-p 2b03455d8000 00:00 0 
2b03457d7000-2b03457d9000 rw-p 0001c000 08:06
4693820                    /lib/ld-2.7.so
2b03457d9000-2b03457db000 r-xp 00000000 08:06
4693818                    /lib/libutil-2.7.so
2b03457db000-2b03459da000 ---p 00002000 08:06
4693818                    /lib/libutil-2.7.so
2b03459da000-2b03459dc000 rw-p 00001000 08:06
4693818                    /lib/libutil-2.7.so
2b03459dc000-2b03459ec000 r-xp 00000000 08:06
528342                     /usr/lib/libXpm.so.4.11.0
2b03459ec000-2b0345bec000 ---p 00010000 08:06
528342                     /usr/lib/libXpm.so.4.11.0
2b0345bec000-2b0345bed000 rw-p 00010000 08:06
528342                     /usr/lib/libXpm.so.4.11.0
2b0345bed000-2b0345bf5000 r-xp 00000000 08:06
524156                     /usr/lib/libSM.so.6.0.0
2b0345bf5000-2b0345df4000 ---p 00008000 08:06
524156                     /usr/lib/libSM.so.6.0.0
2b0345df4000-2b0345df5000 rw-p 00007000 08:06
524156                     /usr/lib/libSM.so.6.0.0
2b0345df5000-2b0345e0b000 r-xp 00000000 08:06
524100                     /usr/lib/libICE.so.6.3.0
2b0345e0b000-2b034600b000 ---p 00016000 08:06
524100                     /usr/lib/libICE.so.6.3.0
2b034600b000-2b034600c000 rw-p 00016000 08:06
524100                     /usr/lib/libICE.so.6.3.0
2b034600c000-2b0346011000 rw-p 2b034600c000 00:00 0 
2b0346011000-2b0346113000 r-xp 00000000 08:06
524535                     /usr/lib/libX11.so.6.2.0
2b0346113000-2b0346213000 ---p 00102000 08:06
524535                     /usr/lib/libX11.so.6.2.0
2b0346213000-2b034621a000 rw-p 00102000 08:06
524535                     /usr/lib/libX11.so.6.2.0
2b034621a000-2b034636e000 r-xp 00000000 08:06
4693798                    /lib/libc-2.7.so
2b034636e000-2b034656e000 ---p 00154000 08:06
4693798                    /lib/libc-2.7.so
2b034656e000-2b0346571000 r--p 00154000 08:06
4693798                    /lib/libc-2.7.so
2b0346571000-2b0346573000 rw-p 00157000 08:06
4693798                    /lib/libc-2.7.so
2b0346573000-2b0346578000 rw-p 2b0346573000 00:00 0 
2b0346578000-2b034657a000 r-xp 00000000 08:06
527433                     /usr/lib/libXau.so.6.0.0
2b034657a000-2b0346679000 ---p 00002000 08:06
527433                     /usr/lib/libXau.so.6.0.0
2b0346679000-2b034667a000 rw-p 00001000 08:06
527433                     /usr/lib/libXau.so.6.0.0
2b034667a000-2b034667b000 rw-p 2b034667a000 00:00 0 
2b034667b000-2b0346680000 r-xp 00000000 08:06
527018                     /usr/lib/libXdmcp.so.6.0.0
2b0346680000-2b034677f000 ---p 00005000 08:06
527018                     /usr/lib/libXdmcp.so.6.0.0
2b034677f000-2b0346780000 rw-p 00004000 08:06
527018                     /usr/lib/libXdmcp.so.6.0.0
2b0346780000-2b0346782000 r-xp 00000000 08:06
4693806                    /lib/libdl-2.7.so
2b0346782000-2b0346982000 ---p 00002000 08:06
4693806                    /lib/libdl-2.7.so
2b0346982000-2b0346984000 rw-p 00002000 08:06
4693806                    /lib/libdl-2.7.so

\start
Date: Thu, 13 Dec 2007 16:21:45 -0500
From: Tim Daly
To: Gregory Vanuxem
Subject: Re: A small error in discardGraph()

Thanks. It will go out after the current build/test cycle completes.

\start
Date: Thu, 13 Dec 2007 22:56:15 -0500
From: Bill Page
To: Martin Rubey
Subject: Re: Close Issues -> Close Fricas Issues

Martin,

On 13 Dec 2007 08:08:05 +0100, Martin Rubey wrote:
> ...
> > > 2) By magic, or Bill Page, we introduce the possibility of closing
> > >     issues for any subset of {axiom, open-axiom, fricas}.  I have
> > >     no idea how that could work, however.  In particular, if one
> > >     selects "open issues", what subset of issues does he get then?
> > >
> >
> > No, I think that is too complicated. What I would like to do is to have
> > bug reports that are specific to each version/fork. Right now this is
> > not the case. But what I think we should do as issues are reviews
> > and/or closed in a particular system, and if the issue is still outstanding
> > in one or more of the other systems, I think we should clone the bug
> > reports (make copies for each system) and then close the ones where
> > the bug is fixed. I know that this might seem like extra work, but
> > copying these reports is really pretty easy just using cut-and-paste
> > in edit mode.
>
> I disagree.  Most bug reports will relate to the algebra, and thus affect
> all versions of axiom.  Cloning all these reports means duplicate effort.
>

I do not think there is any significant duplication of effort. In each
case it is necessary to check that the bug is fixed in a given
version/fork of Axiom. Making a copy of the issue report and changing
the "Axiom Version" to point to that version, then refreshing the page
should make the bug disappear. Really only then it makes sense to
close that report - for that version/fork of Axiom.

> I guess the simplest solution is to replace the "status" categories
> as follows:
>
> open   ... open in all versions
> closed ... closed in all versions
>
> closed in FriCAS
> closed in OpenAxiom
> closed in Axiom
>
> open in FriCAS  --- closed in Axiom and OpenAxiom
> open in OpenAxiom
> open in Axiom
>
> many of the others are not needed or could be merged:
>
> assigned, revised, postponed -> not needed
>
> pending, planned, testing -> merge with fix proposed
>
> not reproducible, need more info -> merge
>
> I think that would be much better organized.
>

I am not against revising the status categories so they are more
specific and better organized but I do think it is essential that we
treat all versions/forks of Axiom on an equal footing on the
NewSynthesis Axiom Wiki. Doing things the way you suggest does not
seem sufficiently equitable to me.

\start
Date: Thu, 13 Dec 2007 22:22:55 -0600 (CST)
From: Gabriel Dos Reis
To: list
Subject: Re: Re: Close Issues -> Close Fricas Issues

On Thu, 13 Dec 2007, Bill Page wrote:

| I am not against revising the status categories so they are more
| specific and better organized but I do think it is essential that we
| treat all versions/forks of Axiom on an equal footing on the
| NewSynthesis Axiom Wiki. Doing things the way you suggest does not
| seem sufficiently equitable to me.

It is normal for people to preach for the religion they like the best.

Bill, it is your project; so, I'll let you decide -- I appreciate your
effort at being equitable. 

\start
Date: Fri, 14 Dec 2007 00:01:17 -0500
From: Bill Page
To: list
Subject: Re: Re: Close Issues -> Close Fricas Issues

Gaby,

On 12/13/07, you wrote:
>
> On Thu, 13 Dec 2007, Bill Page wrote:
>
> | I am not against revising the status categories so they are
> | more specific and better organized but I do think it is essential
> | that we treat all versions/forks of Axiom on an equal footing on
> | the NewSynthesis Axiom Wiki. Doing things the way you
> | suggest does not seem sufficiently equitable to me.
>
> It is normal for people to preach for the religion they like the
> best.

Yes. I am glad for comments, questions or suggestions from anyone. But
actual material contributions are the best of all... :-)

>
> Bill, it is your project; so, I'll let you decide -- I appreciate your
> effort at being equitable.
>

The phrase "your project" might often be interpreted as a euphemism
for "don't expect any help from me" ;-) especially when something is
intended as a "community" effort.

Anyway now that we can support OpenAxiom on the Axiom Wiki I would
like to create some pages specifically to show off some of what is
different about OpenAxiom compared to the others. I have a little
start at that here:

  http://axiom-wiki.newsynthesis.org/SandBoxOpenAxiom

I would like to expand this, add some useful documentation or
references to documentation and then make it a full-fledged "article"
page rather than just a "sandbox" page. If you or anyone in your group
would like to contribute to this, it would be a great help to me. So
far all that I have is what I can follow from your patches and posts
to the open-axiom list.

\start
Date: 14 Dec 2007 06:42:13 +0100
From: Martin Rubey
To: Bill Page, Gabriel Dos Reis
Subject: Re: Close Issues -> Close Fricas Issues

Bill, Gaby,

> > I guess the simplest solution is to replace the "status" categories
> > as follows:
> >
> > open   ... open in all versions
> > closed ... closed in all versions
> >
> > closed in FriCAS
> > closed in OpenAxiom
> > closed in Axiom
> >
> > open in FriCAS  --- closed in Axiom and OpenAxiom
> > open in OpenAxiom
> > open in Axiom
> >
> > many of the others are not needed or could be merged:
> >
> > assigned, revised, postponed -> not needed
> >
> > pending, planned, testing -> merge with fix proposed
> >
> > not reproducible, need more info -> merge
> >
> > I think that would be much better organized.
> >
> 
> I am not against revising the status categories so they are more
> specific and better organized but I do think it is essential that we
> treat all versions/forks of Axiom on an equal footing on the
> NewSynthesis Axiom Wiki. Doing things the way you suggest does not
> seem sufficiently equitable to me.

Sorry, I can't see: which version of axiom would be preferred by the proposal
above?

\start
Date: Fri, 14 Dec 2007 00:45:35 -0500
From: Bill Page
To: Martin Rubey
Subject: Re: Close Issues -> Close Fricas Issues
Cc: Gabriel Dos Reis

On 14 Dec 2007 06:42:13 +0100, Martin Rubey wrote:
> ...
> Sorry, I can't see: which version of axiom would be preferred by
> the proposal above?
>

The version of axiom that no longer exhibits the problem.

\start
Date: 14 Dec 2007 08:27:53 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: Close Issues -> Close Fricas Issues
Cc: Gabriel Dos Reis

Bill Page writes:

> On 14 Dec 2007 06:42:13 +0100, Martin Rubey wrote:
> > ...
> > Sorry, I can't see: which version of axiom would be preferred by
> > the proposal above?
> >
> 
> The version of axiom that no longer exhibits the problem.

But I'd guess that would vary from issue to issue.  And, apart of that, what's
wrong with preferring a version that has an issue closed?

I'd expect that it would rather be an impetus for the others to close the issue
themselves, too.  In fact, that's the reason why I propose the scheme: as you
know, the only stuff I really can deal with are the algebra issues.  Thus,
given that my proposal is implemented, one rainy day I'd click on

"closed in XXX"

and I'd immediately see which patches have not yet been transferred to YYY and
ZZZ.  Since patching the algebra is mostly very easy (once the problem is
solved), it is very little effort to fix YYY and ZZZ and thus have the algebra
synchronized.

Or, if I hit a bug in the version I use, say "ZZZ", I can look at IssueTracker
and see *immediately* whether it has been solved in another version yet.


I'd expect that cloning the issues will imply significant overhead.

\start
Date: 14 Dec 2007 08:43:30 +0100
From: Martin Rubey
To: list
Subject: Re: Re: A small error in discardGraph()

Waldek Hebisch writes:

> Martin Rubey wrote:
> > 
> > Martin Rubey writes:
> > 
> > > Gregory Vanuxem writes:
> > > 
> > > > Hello,
> > > > 
> > > > Here is a patchlet that needs to be reviewed. It fixes a bug in the
> > > > function 'discardGraph' (src/graph/viewman/makeGraph.c). This bug is
> > > > triggered when closing a view2D window [see the end of this email].
> > > 
> > > Super!
> > 
> > Waldek, would you mind if I commit this?
> > 
> 
> Please go on.  But AFAICS the same error appears also in 'freeGraph'
> (in src/graph/view2D/graph2d.c.pamphlet) -- we should corrent this
> one too.

Waldek, I do not understand C.  Thus, I can only patch by analogy...  Greg
supplied:


@@ -144,7 +144,7 @@

   for (j=0, pL=theGraph->listOfListsOfPoints;
        j<theGraph->numberOfLists; j++,pL++)
     free(pL->listOfPoints);
-  free(pL);
+  free(theGraph->listOfListsOfPoints);
   free(theGraph);

}


So I try to guess

void 
freeGraph(int i)
{
  int j;
  pointListStruct *llPtr;

  if (graphArray[i].key) {
    graphArray[i].key = 0;   /* 0 means no graph */
    for (j=0,llPtr=graphArray[i].listOfListsOfPoints; 
	 j<graphArray[i].numberOfLists; j++,llPtr++) 
      free(llPtr->listOfPoints);
-   free(llPtr);
+   ??????????? 
    free(xPointsArray[i].xPoint);
  } else {
  }

}


but I can't.

Help!

\start
Date: 14 Dec 2007 09:09:35 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: Close Issues -> Close Fricas Issues

Bill Page writes:

> > (I see, you are experimenting with running all axioms on
> > MathAction?)
> >
> 
> Yes, I have a preliminary version of the axiom-wiki installed at
> newsynthesis.org (aka. sage.math) that does support all three
> versions/forks of axiom. This is easily expanded and configured
> if/when more versions become available. Right now only the FriCAS
> version supports Aldor.
> 
> The way I choose to do this in the end was to make it possible to
> specify which version/fork of Axiom is to be used on a particular web
> page. More than one version/fork of Axiom *cannot* be mixed on the
> same page. Although this may not be quite as flexible as we might have
> wished, I think it will help to keep things simple.

Great!

One minor thing: would it be possible to automatically display the version
which is used on the page, if it differs from the default version?

(Minor, since where it *really* matters, i.e., on IssueTracker, it's visible)

\start
Date: 14 Dec 2007 13:12:04 +0100
From: Martin Rubey
To: list
Subject: Re: Re: RectangularMatrixCategory should have Finite

Martin Rubey writes:

> Dear Waldek,
> 
> Martin Rubey writes:
> 
> > Waldek Hebisch writes:
> > 
> > > This is issue 258.  I plan to apply the patch below to solve the issue (as
> > > suggested in the issue we modify RectangularMatrixCategory):
> > 
> > Well, you'd also have to provide 
> > 
> > size() == (size()$R)^(m*n)
> > 
> > random() == matrix [[random()$R for i in 1..m] for j in 1..n]
> > 
> > lookup: % -> PositiveInteger
> >   ++ lookup(x) returns a positive integer such that
> >   ++ \spad{x = index lookup x}.
> > 
> > lookup mat ==
> >     s := size()$R
> >     pow := 1
> >     l := listOfLists(mat)
> >     res := 0
> >     for r in l repeat
> >         for c in r repeat
> >             res := res + index(c)$R*pow
> >             pow := pow*s
> >     res
> > 
> > 
> > index: PositiveInteger -> %
> >   ++ index(i) takes a positive integer i less than or equal
> >   ++ to \spad{size()} and
> >   ++ returns the \spad{i}-th element of the set. This operation
> >   ++ establishs a bijection
> >   ++ between the elements of the finite set and \spad{1..size()}.
> > 
> > index i ==
> >     quotients and remainders...
>  
> 
> I just checked: we should really implement these things in HOAGG S, if % has
> finiteAggregate.

My mistake.  finiteAggregate does not mean that all members have the same size,
only that they are all finite.  Eg., List has finiteAggregate.

Should we create another attribute, say, constantSizeAggregate, that says that
each element has the same number of members?  Furthermore, shouldn't
finiteAggregate and constantSizeAggregate rather be categories?  That would
make a lot of things cleaner.

Although, I would then also need a way to construct an element given a list of
its parts.  I vaguely remember that Bill already suggested this.  Back then, I
think, we concluded "no", since there is (of course) no canonical way to do
that...

\start
Date: 14 Dec 2007 16:03:58 +0100
From: Martin Rubey
To: list
Subject: Re: Re: RectangularMatrixCategory should have Finite

Dear Waldek, Gaby, Tim,

below a patch that makes RMATCAT Finite if it is.  A testcase is

R==>RectangularMatrix(2,4, PF 2)
every?(zero?, [lookup(index(i))$R - i for i in 1..2^8])

should give true.

I slightly extended the documentation of HOAGG, since, when I read the
original, I was first led to believe that *domains* that have finiteAggregate
would be finite.  Although the docstring doesn't say that, of course.

Martin



Index: aggcat.spad.pamphlet
===================================================================
--- aggcat.spad.pamphlet	(Revision 150)
+++ aggcat.spad.pamphlet	(Arbeitskopie)
@@ -82,9 +82,31 @@
 ++ In the current system, all aggregates are homogeneous.
 ++ Two attributes characterize classes of aggregates.
 ++ Aggregates from domains with attribute \spadatt{finiteAggregate}
-++ have a finite number of members.
-++ Those with attribute \spadatt{shallowlyMutable} allow an element
+++ have a finite number of members. Of course, such a domain may have an
+++ infinite number of elements, like, for example \spadtype{List}.
+++ Those domains with attribute \spadatt{shallowlyMutable} allow an element  
 ++ to be modified or updated without changing its overall value.
+@
+
+It would probably make sense to make [[HOAGG S]] export [[Finite]], when this
+is the case.  The following modifications would be necessary:
+\begin{itemize}
+\item we need another attribute, say, [[constantSizeAggregate]], that says that
+  each aggregate has the same number of members.
+\item we need a way to construct an aggregate given a list of its parts, i.e.,
+  an operation
+\begin{verbatim}
+    construct: List R -> %
+\end{verbatim}
+\end{itemize}
+Then, the exports of [[Finite]] could be implemented similar to
+[[RectangularMatrixCategory]].
+
+We should also consider making [[finiteAggregate]] and
+[[constantSizeAggregate]] categories, rather than attributes.  This would make
+a lot of things cleaner.
+
+<<category HOAGG HomogeneousAggregate>>=
 HomogeneousAggregate(S:Type): Category == Aggregate with
    if S has SetCategory then SetCategory
    if S has SetCategory then
Index: matcat.spad.pamphlet
===================================================================
--- matcat.spad.pamphlet	(Revision 150)
+++ matcat.spad.pamphlet	(Arbeitskopie)
@@ -570,6 +570,8 @@
     finiteAggregate
       ++ matrices are finite
 
+    if R has Finite then Finite
+
     if R has CommutativeRing then Module(R)
 
 --% Matrix creation
@@ -674,6 +676,38 @@
         ++ \spad{nullSpace(m)}+ returns a basis for the null space of
         ++ the matrix m.
    add
+
+     if R has Finite then
+         size() == (size()$R)**(m*n)
+
+         random() == matrix [[random()$R for i in 1..m] for j in 1..n]
+
+         lookup x ==
+             s := size()$R
+             pow: Integer := 1
+             l := listOfLists(x)
+             res: Integer := 1
+             for r in l repeat
+                 for c in r repeat
+                     res := res + (lookup(c)$R-1)*pow
+                     pow := pow*s
+             res::PositiveInteger
+
+         index i ==
+             s := size()$R
+             old := divide(i-1, s)
+             res: List List R := []
+            
+             for i in 1..m repeat
+                 row: List R := []
+                 for j in 1..n repeat
+                     el:R := index((old.remainder + 1)::PositiveInteger)$R
+                     row := cons(el, row)
+                     old := divide(old.quotient, s)
+                 res := cons(reverse! row, res)
+
+             matrix reverse! res
+
      nrows x == m
      ncols x == n
      square? x == m = n


\start
Date: Fri, 14 Dec 2007 12:55:08 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: Re: RectangularMatrixCategory should have Finite

Excellent. I'll put this in after I install/test Greg's patch -- Tim

\start
Date: Sat, 15 Dec 2007 18:29:59 -0800
From: Arthur Ralfs
To: list
Subject: mathml patch


Hi Tim, Waldek,

This patch covers a few typos in the documentation and the correction
for "continuedFraction(3,repeating [1], repeating [3,6])".&nbsp;
Waldek your patch for this one missed the last "ZAG" in the case of a
finite continued fraction and replaced it with an ellipsis.&nbsp; I've
added a test to see if the last argument is a ZAG or an
ellipsis.&nbsp; If neither then I give an error but still deliver
valid MathML, i.e. the error is contained in an mtext element&nbsp; I
didn't change the formatZag1 function since it's not used and I'm not
sure what I want to do with it.

I'm hoping to work through all the bugs I have and also do some
significant rewriting of the documentation.&nbsp; Would you like this
as a series of patches or one big one at the end?&nbsp; Or since the
package may end up being largely rewritten maybe I should just send
the rewritten package?

Arthur

----7d324b22fd2c30445b75

LS0tIG1hdGhtbC5zcGFkLnBhbXBobGV0CTIwMDctMTItMTEgMDc6MDA6NDUuMDAwMDAwMDAw
IC0wODAwCisrKyBtYXRobWwuc3BhZC5wYW1waGxldC5uZXcJMjAwNy0xMi0xNSAxNjoxODoz
My4wMDAwMDAwMDAgLTA4MDAKQEAgLTI1LDE0ICsyNSwxNCBAQAogQXQgdGhpcyB0aW1lICgy
MDA3LTAyLTExKSB0aGUgcGFja2FnZSBvbmx5IGhhcyBhIHByZXNlbnRhdGlvbgogcGFja2Fn
ZS4gIEEgY29udGVudCBwYWNrYWdlIGlzIGluIHRoZQogd29ya3MgaG93ZXZlciBpdCBpcyBt
b3JlIGRpZmZpY3VsdC4gIFVuZm9ydHVuYXRlbHkgQXhpb20gZG9lcwotbm90IG1ha2UgaXRz
IHNlbWFudGljcyBlYXNsaXkgYXZhaWxhYmxlLiAgVGhlIFxzcGFkdHlwZXtPdXRwdXRGb3Jt
fQorbm90IG1ha2UgaXRzIHNlbWFudGljcyBlYXNpbHkgYXZhaWxhYmxlLiAgVGhlIFxzcGFk
dHlwZXtPdXRwdXRGb3JtfQogZG9tYWluIG1lZGlhdGVzIGJldHdlZW4gdGhlIGluZGl2aWR1
YWwgQXhpb20gZG9tYWlucyBhbmQgdGhlCiB1c2VyIHZpc2libGUgb3V0cHV0IGJ1dCBcc3Bh
ZHR5cGV7T3V0cHV0Rm9ybX0gZG9lcyBub3QgcHJvdmlkZSBmdWxsCiBzZW1hbnRpYyBpbmZv
cm1hdGlvbi4gIEZyb20gbXkgY3VycmVudGx5IGluY29tcGxldGUgdW5kZXJzdGFuZGluZwog
b2YgQXhpb20gaXQgYXBwZWFycyB0aGF0IHJlbWVkeWluZyB0aGlzIHdvdWxkIGVudGFpbCBn
b2luZyBiYWNrCiB0byB0aGUgaW5kaXZpZHVhbCBkb21haW5zIGFuZCByZXdyaXRpbmcgYSBs
b3Qgb2YgY29kZS4KIEhvd2V2ZXIgc29tZSBzZW1hbnRpY3MgYXJlIGNvbnZleWVkIGRpcmVj
dGx5IGJ5IFxzcGFkdHlwZXtPdXRwdXRGb3JtfSBhbmQgb3RoZXIKLXRoaW5ncyBjYW4gYmUg
ZGVkdWNlZCBmcm9tIFxzcGFkdHlwZXtPdXRwdXRGb3JtfSBvciBmb3JtIHRoZSBvcmlnaW5h
bAordGhpbmdzIGNhbiBiZSBkZWR1Y2VkIGZyb20gXHNwYWR0eXBle091dHB1dEZvcm19IG9y
IGZyb20gdGhlIG9yaWdpbmFsCiB1c2VyIGNvbW1hbmQuCiAKIFxzZWN0aW9ue0Rpc3BsYXlp
bmcgTWF0aE1MfQpAQCAtMTA3LDcgKzEwNyw3IEBACiBJIGRvbid0IGtub3cgb2YgYW55IEF4
aW9tIGNvbW1hbmQgdGhhdCBwcm9kdWNlcyBzdWNoIGFuIG9iamVjdC4gSW4KIGZhY3QgYXQg
cHJlc2VudCBJIHNlZSB0aGUgY2FzZSBvZiAiU1VQRVJTVUIiIGJlaW5nIHVzZWQgZm9yIHB1
dHRpbmcKIHByaW1lcyBpbiB0aGUgc3VwZXJzY3JpcHQgcG9zaXRpb24gdG8gZGVub3RlIG9y
ZGluYXJ5IGRpZmZlcmVudGlhdGlvbi4KLUkgYWxzbyBvbmx5IHNlZSB0aGUgIlNVQiIgY2Fz
ZSBiZWluZyBvbmx5IHVzZWQgdG8gZGVub3RlIHBhcnRpYWwKK0kgYWxzbyBvbmx5IHNlZSB0
aGUgIlNVQiIgY2FzZSBiZWluZyB1c2VkIHRvIGRlbm90ZSBwYXJ0aWFsCiBkZXJpdmF0aXZl
cy4KIAogXHNlY3Rpb257KXNldCBvdXRwdXQgbWF0aG1sIG9ufQpAQCAtMTE2LDcgKzExNiw3
IEBACiBNYWtpbmcgbWF0aG1sIGFwcGVhciBhcyBvdXRwdXQgZHVyaW5nIGEgbm9ybWFsIEF4
aW9tIHNlc3Npb24KIGJ5IGludm9raW5nICIpc2V0IG91dHB1dCBtYXRobWwgb24iIHByb3Zl
ZCB0byBiZSBhIGJpdCB0ZWRpb3VzCiBhbmQgc2VlbXMgdG8gYmUgdW5kb2N1bWVudGVkLiAg
SSBkb2N1bWVudCBteSBleHBlcmllbmNlIGhlcmUKLWluIGNhc2UgaW4gcHJvdmVzIHVzZWZ1
bCB0byBzb21lYm9keSBlbHNlIHRyeWluZyB0byBnZXQgYSBuZXcKK2luIGNhc2UgaXQgcHJv
dmVzIHVzZWZ1bCB0byBzb21lYm9keSBlbHNlIHRyeWluZyB0byBnZXQgYSBuZXcKIG91dHB1
dCBmb3JtYXQgZnJvbSBBeGlvbS4KIAogSW4gXHNwYWR0eXBle01hdGhNTEZvcm1hdH0gdGhl
IGZ1bmN0aW9ucyAKQEAgLTIzMSw3ICsyMzEsNyBAQAogCiBJIGRvbid0IHNlZSB0aGF0IHRo
aXMgZmlsZSBpcyB1c2VkIGFueXdoZXJlIGJ1dCBJIG1hZGUKIHRoZSBhcHByb3ByaWF0ZSBj
aGFuZ2VzIGFueXdheSBieSBzZWFyY2hpbmcgZm9yICJURVgiIGFuZAotbWltaWNpbmcgZXZl
cnRoaW5nIGZvciBNTUxGT1JNLgorbWltaWNpbmcgZXZlcnl0aGluZyBmb3IgTU1MRk9STS4K
IAogXHN1YnNlY3Rpb257RmlsZSBzcmMvZG9jL2F4aW9tLmJpYi5wYW1waGxldH0KIApAQCAt
Mjg1LDE0ICsyODUsMTQgQEAKIFRoZSBwdWJsaWNseSBleHBvc2VkIGZ1bmN0aW9ucyBhcmU6
CiAKICAgICBcc3BhZGZ1bntjb2VyY2U6IEUgLSQ+JCBTfSAgVGhpcyBmdW5jdGlvbiBpcyB0
aGUgbWFpbiBvbmUgZm9yIGNvbnZlcnRpbmcKLWFuZCBleHByZXNzaW9uIGluIGRvbWFpbiBP
dXRwdXRGb3JtIGludG8gYSBNYXRoTUwgc3RyaW5nLgorYW4gZXhwcmVzc2lvbiBpbiBkb21h
aW4gT3V0cHV0Rm9ybSBpbnRvIGEgTWF0aE1MIHN0cmluZy4KIAogICAgIFxzcGFkZnVue2Nv
ZXJjZVM6IEUgLSQ+JCBTfSAgVGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGZyb20gdGhlIGNv
bW1hbmQgbGluZS4KIEl0IGNvbnZlcnRzIGFuIE91dHB1dEZvcm0gZXhwcmVzc2lvbiBpbnRv
IGEgTWF0aE1MIHN0cmluZyBhbmQgZG9lcwogc29tZSBmb3JtYXR0aW5nIHNvIHRoYXQgdGhl
IG91dHB1dCBpcyBub3Qgb25lIGxvbmcgbGluZS4gIElmIHlvdSB0YWtlCiB0aGUgb3V0cHV0
IGZyb20gdGhpcyBmdW5jdGlvbiwgc3RpY2sgaXQgaW4gYW4gZW1hY3MgYnVmZmVyIGluCiBu
eG1sLW1vZGUgYW5kIHRoZW4gaW5kZW50IGFjY29yZGluZyB0byBtb2RlLCB5b3UnbGwgZ2V0
IHNvbWV0aGluZyB0aGF0J3MKLW5pY2VyIHRvIGxvb2sgYXQgdGhhbiBjb21lcyBmcm9tIGNv
ZXJjZS4gTm90ZSB0aGF0IGNvZXJjZVMgcmV0dXJucworbmljZXIgdG8gbG9vayBhdCB0aGFu
IHdoYXQgY29tZXMgZnJvbSBjb2VyY2UuIE5vdGUgdGhhdCBjb2VyY2VTIHJldHVybnMKIHRo
ZSBzYW1lIHZhbHVlIGFzIGNvZXJjZSBidXQgaW52b2tlcyBhIGRpc3BsYXkgZnVuY3Rpb24g
YXMgd2VsbCBzbyB0aGF0CiB0aGUgcmVzdWx0IHdpbGwgYmUgcHJpbnRlZCB0d2ljZSBpbiBk
aWZmZXJlbnQgZm9ybWF0cy4gIFRoZSBuZWVkIGZvciB0aGlzCiBpcyB0aGF0IHRoZSBvdXRw
dXQgZnJvbSBjb2VyY2UgaXMgYXV0b21hdGljYWxseSBmb3JtYXR0ZWQgd2l0aCBsaW5lIGJy
ZWFrcwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgaW1wb3J0IExpc3QgT3V0cHV0Rm9ybQog
ICAgIGltcG9ydCBMaXN0IFN0cmluZwogCi0gICAgLS0gbG9jYWwgdmFyaWFibGVzIGRlY2xh
cmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMKKyAgICAtLSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJh
dGlvbnMgYW5kIGRlZmluaXRpb25zCiAKICAgICBleHByOiBFCiAgICAgcHJlYyxvcFByZWM6
IEkKQEAgLTExOTEsMTUgKzExOTEsMzEgQEAKICAgICAgIG51bGwgYXJncyA9PiAiIgogICAg
ICAgcCA6IEkgOj0gcG9zaXRpb24ob3AsbmFyeU9wcykKICAgICAgIHAgPCAxID0+IGVycm9y
ICJ1bmtub3duIG5hcnkgb3AiCi0gICAgICAtLSBuZWVkIHRvIHRlc3QgZm9yICJaQUciIGNh
c2UgYW5kIGRpdmVydCBpdCBoZXJlLCBoZXJlJ3MgYW4KLSAgICAgIC0tIGV4YW1wbGUgaW5j
bHVkaW5nICJvcCIsIHRoZSBhcmdzIGxpc3Qgd291bGQgYmUgdGhlIHJlc3Qgb2YgdGhpcwor
ICAgICAgLS0gbmVlZCB0byB0ZXN0IGZvciAiWkFHIiBjYXNlIGFuZCBkaXZlcnQgaXQgaGVy
ZQorICAgICAgLS0gZXggMS4gY29udGludWVkRnJhY3Rpb24oMzE0MTU5LzEwMDAwMCkKICAg
ICAgIC0tIHt7K317M317e1pBR317MX17N319e3taQUd9ezF9ezE1fX17e1pBR317MX17MX19
e3taQUd9ezF9ezI1fX0KICAgICAgIC0tIHt7WkFHfXsxfXsxfX17e1pBR317MX17N319e3ta
QUd9ezF9ezR9fX0KLSAgICAgIC0tIFRoZSBmaXJzdCBhcmcsIHRoZSAiMyIgaW4gdGhpcyBj
YXNlLCBjb3VsZCBiZSBhICJaQUciIG9yIHNvbWV0aGluZworICAgICAgLS0gdGhpcyBpcyB0
aGUgcHJlY29uZGl0aW9uZWQgb3V0cHV0IGZvcm0KKyAgICAgIC0tIGluY2x1ZGluZyAib3Ai
LCB0aGUgYXJncyBsaXN0IHdvdWxkIGJlIHRoZSByZXN0IG9mIHRoaXMKKyAgICAgIC0tIGku
ZSBvcCA9ICcrJyBhbmQgYXJncyA9IHt7M317e1pBR317MX17N319e3taQUd9ezF9ezE1fX0K
KyAgICAgIC0tIHt7WkFHfXsxfXsxfX17e1pBR317MX17MjV9fXt7WkFHfXsxfXsxfX17e1pB
R317MX17N319e3taQUd9ezF9ezR9fX0KKyAgICAgIC0tIGV4IDIuIGNvbnRpbnVlZEZyYWN0
aW9uKDE0MTU5LzEwMDAwMCkKKyAgICAgIC0tIHRoaXMgb25lIGRvZXNuJ3QgaGF2ZSB0aGUg
bGVhZGluZyBpbnRlZ2VyCisgICAgICAtLSB7eyt9e3taQUd9ezF9ezd9fXt7WkFHfXsxfXsx
NX19e3taQUd9ezF9ezF9fXt7WkFHfXsxfXsyNX19CisgICAgICAtLSB7e1pBR317MX17MX19
e3taQUd9ezF9ezd9fXt7WkFHfXsxfXs0fX19CisgICAgICAtLQorICAgICAgLS0gZXggMy4g
Y29udGludWVkRnJhY3Rpb24oMyxyZXBlYXRpbmcgWzFdLCByZXBlYXRpbmcgWzMsNl0pCisg
ICAgICAtLSB7eyt9ezN9e3taQUd9ezF9ezN9fXt7WkFHfXsxfXs2fX17e1pBR317MX17M319
e3taQUd9ezF9ezZ9fQorICAgICAgLS0ge3taQUd9ezF9ezN9fXt7WkFHfXsxfXs2fX17e1pB
R317MX17M319e3taQUd9ezF9ezZ9fQorICAgICAgLS0ge3taQUd9ezF9ezN9fXt7WkFHfXsx
fXs2fX17Li4ufX0KKyAgICAgIC0tIEluIGVhY2ggb2YgdGhlc2UgZXhhbXBsZXMgdGhlIGFy
Z3MgbGlzdCBjb25zaXN0cyBvZiB0aGUgdGVybXMKKyAgICAgIC0tIGZvbGxvd2luZyB0aGUg
JysnIG9wCisgICAgICAtLSBzbyB0aGUgZmlyc3QgYXJnIGNvdWxkIGJlIGEgIlpBRyIgb3Ig
c29tZXRoaW5nCiAgICAgICAtLSBlbHNlLCBidXQgdGhlIHNlY29uZCBhcmcgbG9va3MgbGlr
ZSBpdCBoYXMgdG8gYmUgIlpBRyIsIHNvIG1heWJlCi0gICAgICAtLSB0ZXN0IGZvciAjYXJn
cyA+IDEgYW5kIGFyZ3MuMiBpcyAiWkFHIi4KLSAgICAgIC0tIFRoaXMgdGVzdCBzaG91bGQg
d29yayBzbyBsb25nIGFzIGF4aW9tIGRvZXNuJ3QgdHJ5IHRvIGV2YWx1YXRlCi0gICAgICAt
LSB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlICJhbmQiIHdoZW4gdGhlIGZpcnN0IGhhbGYgaXMg
ZmFsc2UuCisgICAgICAtLSB0ZXN0IGZvciAjYXJncyA+IDEgYW5kIGFyZ3MuMiBjb250YWlu
cyAiWkFHIi4KKyAgICAgIC0tIE5vdGUgdGhhdCBzaW5jZSB0aGUgcmVzdWx0aW5nIE1hdGhN
TCA8bWZyYWM+cyBhcmUgbmVzdGVkIHdlIG5lZWQKKyAgICAgIC0tIHRvIGhhbmRsZSB0aGUg
d2hvbGUgY29udGludWVkIGZyYWN0aW9uIGF0IG9uY2UsIGkuZS4gd2UgY2FuJ3QKKyAgICAg
IC0tIGp1c3QgbG9vayBmb3IsIGUuZy4sIHt7WkFHfXsxfXs2fX0KICAgICAgICgjYXJncyA+
IDEpIGFuZCAocG9zaXRpb24oIlpBRyIsc3RyaW5naWZ5IGZpcnN0IHJlc3QgYXJncywxKSA+
IDApID0+CiAJICAgdG1wUyA6IFMgOj0gc3RyaW5naWZ5IGZpcnN0IGFyZ3MKIAkgICBwb3Np
dGlvbigiWkFHIix0bXBTLDEpID4gMCA9PiBmb3JtYXRaYWcoYXJncykKQEAgLTEyMjQsMTEg
KzEyNDAsMTcgQEAKICAgICAgIHMKIAogICAgIGZvcm1hdFphZyhhcmdzIDogTCBFKSA6IFMg
PT0KLSAgICAtLSB7e1pBR317MX17N319CisgICAgLS0gYXJncyB3aWxsIGJlIGEgbGlzdCBv
ZiB0aGluZ3MgbGlrZSB0aGlzIHt7WkFHfXsxfXs3fX0sIHRoZSBaQUcKKyAgICAtLSBtdXN0
IGJlIHRoZXJlLCB0aGUgJzEnIGFuZCAnNycgY291bGQgY29uY2VpdmFibHkgYmUgbW9yZSBj
b21wbGV4CisgICAgLS0gZXhwcmVzc2lvbnMKICAgICAgIHRtcFphZyA6IEwgRSA6PSBmaXJz
dCBhcmdzIHByZXRlbmQgTCBFCisgICAgICAtLSBtYXkgd2FudCB0byB0ZXN0IHRoYXQgdG1w
WmFnIGNvbnRhaW5zICdaQUcnCiAgICAgICAjYXJncyA+IDEgPT4gIjxtZnJhYz4iZm9ybWF0
TW1sKGZpcnN0IHJlc3QgdG1wWmFnLG1pblByZWMpIjxtcm93Pjxtbj4iZm9ybWF0TW1sKGZp
cnN0IHJlc3QgcmVzdCB0bXBaYWcsbWluUHJlYykiPC9tbj48bW8+KzwvbW8+ImZvcm1hdFph
ZyhyZXN0IGFyZ3MpIjwvbXJvdz48L21mcmFjPiIKLSAgICAgICI8bWZyYWM+ImZvcm1hdE1t
bChmaXJzdCByZXN0IHRtcFphZyxtaW5QcmVjKWZvcm1hdE1tbChmaXJzdCByZXN0IHJlc3Qg
dG1wWmFnLG1pblByZWMpIjwvbWZyYWM+IgotICAgICAgCisgICAgICAoZmlyc3QgYXJncyA9
ICIuLi4iOjpFKUBCb29sZWFuID0+ICI8bW8+JiN4MjAyNjs8L21vPiIKKyAgICAgIHBvc2l0
aW9uKCJaQUciLHN0cmluZ2lmeSBmaXJzdCBhcmdzLDEpID4gMCA9PgorICAgICAgICAgICI8
bWZyYWM+ImZvcm1hdE1tbChmaXJzdCByZXN0IHRtcFphZyxtaW5QcmVjKWZvcm1hdE1tbChm
aXJzdCByZXN0IHJlc3QgdG1wWmFnLG1pblByZWMpIjwvbWZyYWM+IiAgICAgIAorICAgICAg
IjxtdGV4dD5mb3JtYXRaYWc6IFVuZXhwZWN0ZWQga2luZCBvZiBaQUc8L210ZXh0PiIKKwog
ICAgIGZvcm1hdFphZzEoYXJncyA6IEwgRSkgOiBTID09CiAgICAgLS0gbWFrZSBhbHRlcm5h
dGl2ZSBaQUcgZm9ybWF0IHdpdGhvdXQgZGltaW5pc2hpbmcgZm9udHMsIG1heWJlCiAgICAg
LS0gdXNlIGEgdGFibGUK

----7d324b22fd2c30445b75--

\start
Date: Sat, 15 Dec 2007 15:09:36 -0600
From: Tim Daly
To: list
Subject: 20071215.03.gxv.patch (7023)

This patch is due to Greg Vanuxem. 

The bug is triggered when doing
   draw(sin(x),x=-%pi..%pi)
When the graphics window is closed the code failed with a stack
backtrace. This fixes that problem.

Tim

==================================================================
diff --git a/changelog b/changelog
index 6d3b0b6..09919c7 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071215 gxv src/graph/viewman/makegraph.c discardGraph free corrected (7023)
 20071215 tpd src/hyper/Makefile fix typo in bookvol11 building stanza
 20071215 tpd src/hyper/axbook.tgz fix the user/group settings
 20071215 tpd src/interp/bookvol5 browse and top-level command handling
diff --git a/src/graph/viewman/makegraph.c.pamphlet b/src/graph/viewman/makegraph.c.pamphlet
index 0a4c7da..18dcc3d 100644
--- a/src/graph/viewman/makegraph.c.pamphlet
+++ b/src/graph/viewman/makegraph.c.pamphlet
@@ -143,7 +143,7 @@ discardGraph (graphStruct *theGraph)
   for (j=0, pL=theGraph->listOfListsOfPoints; 
           j<theGraph->numberOfLists; j++,pL++)
     free(pL->listOfPoints);
-  free(pL);
+  free(theGraph->listOfListsOfPoints);
   free(theGraph);
 
 }

\start
Date: Sat, 15 Dec 2007 23:18:31 -0500
From: Tim Daly
To: list
Subject: [Tim Daly: 20071215.02.tpd.patch]

This seems to have been lost....

This patch fixes minor issues with the 20071215.01.tpd.patch changeset.

The bookvol11 document buidling stanza moved to the wrong directory
and thus cannot find the axiomfront.ps file.

The user/group information in the axbook.tgz file was wrong.

Tim

=======================================================================
diff --git a/changelog b/changelog
index 684be9c..6d3b0b6 100644
- --- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20071215 tpd src/hyper/Makefile fix typo in bookvol11 building stanza
+20071215 tpd src/hyper/axbook.tgz fix the user/group settings
 20071215 tpd src/interp/bookvol5 browse and top-level command handling
 20071215 tpd src/interp/setq.lisp move command initialization to bookvol5
 20071215 tpd src/interp/nci.lisp move ncloopInclude to bookvol5
diff --git a/src/hyper/Makefile.pamphlet b/src/hyper/Makefile.pamphlet
index 7d43f87..39c9ea8 100644
- --- a/src/hyper/Makefile.pamphlet
+++ b/src/hyper/Makefile.pamphlet
@@ -1114,7 +1114,7 @@ ${HYPER}/doctitle.png: ${IN}/doctitle.png
 ${MNT}/${SYS}/doc/bookvol11.dvi: ${IN}/bookvol11.pamphlet 
 	@ echo 153 making ${MNT}/${SYS}/doc/bookvol11.dvi \
             from ${IN}/bookvol11.pamphlet
- -	@ ( cd ${MNT}/${SYS} ; \
+	@ ( cd ${MNT}/${SYS}/doc ; \
 	    cp ${IN}/bookvol11.pamphlet . ; \
 	    ${DOCUMENT} ${NOISE} bookvol11 ; \
 	    rm -f bookvol11.pamphlet ; \
@@ -1125,7 +1125,7 @@ ${MNT}/${SYS}/doc/bookvol11.dvi: ${IN}/bookvol11.pamphlet
 @
 <<axbook>>=
 ${HYPER}/axbook/book-index.xhtml: ${IN}/axbook.tgz
- -	@ echo 154 making ${HYPER}/axbook/*.xhtml from ${IN}/axbook.tgz
+	@ echo 154 making ${HYPER}/axbook/xhtml from ${IN}/axbook.tgz
 	@( cd ${HYPER} ; tar -zxf ${IN}/axbook.tgz )
 
 @
diff --git a/src/hyper/axbook.tgz b/src/hyper/axbook.tgz
index 2baf4bb..1f24460 100644
Binary files a/src/hyper/axbook.tgz and b/src/hyper/axbook.tgz differ
------- End of forwarded message -------

\start
Date: Sat, 15 Dec 2007 21:14:34 -0800
From: Arthur Ralfs
To: list 
Subject: mathml hex(10) patch

This is a multi-part message in MIME format.

----ad764d1f95112f073c30

Tim, Waldek,<br><br>This patch is a band-aid for the hex(10)=
 bug.<br>I think there are some deeper inconsistencies however.<=
br>Consider the following:<br><br>(17) -&gt=3B radix(5/24,=
39)<br>&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B &nbsp=3B &nbsp=3B &=
nbsp=3B &nbsp=3B =5F=5F=5F=5F<br>&nbsp=3B&nbsp=3B (17)&nbsp=3B=
 0 . 8 4 34<br>&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B Type: RadixExpansion 39<=
br>(18) -&gt=3B radix(5/24,40)<br>&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B &=
nbsp=3B &nbsp=3B &nbsp=3B&nbsp=3B &nbsp=3B&nbsp=3B =5F<br>=
&nbsp=3B&nbsp=3B (18)&nbsp=3B 0 . 8 D<br>&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B Type: RadixExpansion 40<br><br>why do we get letters in (1=
8) but all digits in (17)?<br><br>(21) -&gt=3B radix(5/24,=
43)<br>&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B &nbsp=3B &nbsp=3B &nbsp=3B =5F=
=5F=5F=5F<br>&nbsp=3B&nbsp=3B (21)&nbsp=3B 0 . 8 41<br>&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B Type: RadixExpansion 43<br><br>Here we ge=
t a ragit greater than 36 but<br><br>(22) -&gt=3B radix(35,3=
6)<br><br>&nbsp=3B&nbsp=3B (22)&nbsp=3B Z<br>&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B Type: RadixExpansion 36<br>(23) -&gt=3B radix(36,=
37)<br><br>&nbsp=3B&nbsp=3B &gt=3B&gt=3B Error detected =
within library code:<br>&nbsp=3B&nbsp=3B index out of range<=
br><br>(23) -&gt=3B )set output tex on<br>(23) -&gt=3B rad=
ix(10,16)<br><br>&nbsp=3B&nbsp=3B (23)&nbsp=3B A<br>=
=24=24<br>=23=5CA<br>=5Cleqno(23)<br>=24=24<br><br>T=
eX shows =23=5CA<br><br>(25) -&gt=3B )set output tex off<br>=
(25) -&gt=3B radix(10,16)<br><br>&nbsp=3B&nbsp=3B (25)&=
nbsp=3B A<br>&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&=
nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nb=
sp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=
=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B=
&nbsp=3B&nbsp=3B&nbsp=3B&nbsp=3B Type: RadixExpansion 16<br>=
(26) -&gt=3B exprex(=25)<br><br>&nbsp=3B&nbsp=3B (26)&nb=
sp=3B "=7B=23=5CA=7D"<br><br>exprex shows the preconditioned=
 output form which shows =23=5CA<br><br>Arthur<br><br><=
br><br><br><br>

----ad764d1f95112f073c30
 filename=mathml.spad.pamphlet.hex10.patch

LS0tIG1hdGhtbC5zcGFkLnBhbXBobGV0CTIwMDctMTItMTEgMDc6MDA6NDUuMDAwMDAwMDAw
IC0wODAwCisrKyBtYXRobWwuc3BhZC5wYW1waGxldC5uZXcJMjAwNy0xMi0xNSAyMDozMTow
NS4wMDAwMDAwMDAgLTA4MDAKQEAgLTI1LDE0ICsyNSwxNCBAQAogQXQgdGhpcyB0aW1lICgy
MDA3LTAyLTExKSB0aGUgcGFja2FnZSBvbmx5IGhhcyBhIHByZXNlbnRhdGlvbgogcGFja2Fn
ZS4gIEEgY29udGVudCBwYWNrYWdlIGlzIGluIHRoZQogd29ya3MgaG93ZXZlciBpdCBpcyBt
b3JlIGRpZmZpY3VsdC4gIFVuZm9ydHVuYXRlbHkgQXhpb20gZG9lcwotbm90IG1ha2UgaXRz
IHNlbWFudGljcyBlYXNsaXkgYXZhaWxhYmxlLiAgVGhlIFxzcGFkdHlwZXtPdXRwdXRGb3Jt
fQorbm90IG1ha2UgaXRzIHNlbWFudGljcyBlYXNpbHkgYXZhaWxhYmxlLiAgVGhlIFxzcGFk
dHlwZXtPdXRwdXRGb3JtfQogZG9tYWluIG1lZGlhdGVzIGJldHdlZW4gdGhlIGluZGl2aWR1
YWwgQXhpb20gZG9tYWlucyBhbmQgdGhlCiB1c2VyIHZpc2libGUgb3V0cHV0IGJ1dCBcc3Bh
ZHR5cGV7T3V0cHV0Rm9ybX0gZG9lcyBub3QgcHJvdmlkZSBmdWxsCiBzZW1hbnRpYyBpbmZv
cm1hdGlvbi4gIEZyb20gbXkgY3VycmVudGx5IGluY29tcGxldGUgdW5kZXJzdGFuZGluZwog
b2YgQXhpb20gaXQgYXBwZWFycyB0aGF0IHJlbWVkeWluZyB0aGlzIHdvdWxkIGVudGFpbCBn
b2luZyBiYWNrCiB0byB0aGUgaW5kaXZpZHVhbCBkb21haW5zIGFuZCByZXdyaXRpbmcgYSBs
b3Qgb2YgY29kZS4KIEhvd2V2ZXIgc29tZSBzZW1hbnRpY3MgYXJlIGNvbnZleWVkIGRpcmVj
dGx5IGJ5IFxzcGFkdHlwZXtPdXRwdXRGb3JtfSBhbmQgb3RoZXIKLXRoaW5ncyBjYW4gYmUg
ZGVkdWNlZCBmcm9tIFxzcGFkdHlwZXtPdXRwdXRGb3JtfSBvciBmb3JtIHRoZSBvcmlnaW5h
bAordGhpbmdzIGNhbiBiZSBkZWR1Y2VkIGZyb20gXHNwYWR0eXBle091dHB1dEZvcm19IG9y
IGZyb20gdGhlIG9yaWdpbmFsCiB1c2VyIGNvbW1hbmQuCiAKIFxzZWN0aW9ue0Rpc3BsYXlp
bmcgTWF0aE1MfQpAQCAtMTA3LDcgKzEwNyw3IEBACiBJIGRvbid0IGtub3cgb2YgYW55IEF4
aW9tIGNvbW1hbmQgdGhhdCBwcm9kdWNlcyBzdWNoIGFuIG9iamVjdC4gSW4KIGZhY3QgYXQg
cHJlc2VudCBJIHNlZSB0aGUgY2FzZSBvZiAiU1VQRVJTVUIiIGJlaW5nIHVzZWQgZm9yIHB1
dHRpbmcKIHByaW1lcyBpbiB0aGUgc3VwZXJzY3JpcHQgcG9zaXRpb24gdG8gZGVub3RlIG9y
ZGluYXJ5IGRpZmZlcmVudGlhdGlvbi4KLUkgYWxzbyBvbmx5IHNlZSB0aGUgIlNVQiIgY2Fz
ZSBiZWluZyBvbmx5IHVzZWQgdG8gZGVub3RlIHBhcnRpYWwKK0kgYWxzbyBvbmx5IHNlZSB0
aGUgIlNVQiIgY2FzZSBiZWluZyB1c2VkIHRvIGRlbm90ZSBwYXJ0aWFsCiBkZXJpdmF0aXZl
cy4KIAogXHNlY3Rpb257KXNldCBvdXRwdXQgbWF0aG1sIG9ufQpAQCAtMTE2LDcgKzExNiw3
IEBACiBNYWtpbmcgbWF0aG1sIGFwcGVhciBhcyBvdXRwdXQgZHVyaW5nIGEgbm9ybWFsIEF4
aW9tIHNlc3Npb24KIGJ5IGludm9raW5nICIpc2V0IG91dHB1dCBtYXRobWwgb24iIHByb3Zl
ZCB0byBiZSBhIGJpdCB0ZWRpb3VzCiBhbmQgc2VlbXMgdG8gYmUgdW5kb2N1bWVudGVkLiAg
SSBkb2N1bWVudCBteSBleHBlcmllbmNlIGhlcmUKLWluIGNhc2UgaW4gcHJvdmVzIHVzZWZ1
bCB0byBzb21lYm9keSBlbHNlIHRyeWluZyB0byBnZXQgYSBuZXcKK2luIGNhc2UgaXQgcHJv
dmVzIHVzZWZ1bCB0byBzb21lYm9keSBlbHNlIHRyeWluZyB0byBnZXQgYSBuZXcKIG91dHB1
dCBmb3JtYXQgZnJvbSBBeGlvbS4KIAogSW4gXHNwYWR0eXBle01hdGhNTEZvcm1hdH0gdGhl
IGZ1bmN0aW9ucyAKQEAgLTIzMSw3ICsyMzEsNyBAQAogCiBJIGRvbid0IHNlZSB0aGF0IHRo
aXMgZmlsZSBpcyB1c2VkIGFueXdoZXJlIGJ1dCBJIG1hZGUKIHRoZSBhcHByb3ByaWF0ZSBj
aGFuZ2VzIGFueXdheSBieSBzZWFyY2hpbmcgZm9yICJURVgiIGFuZAotbWltaWNpbmcgZXZl
cnRoaW5nIGZvciBNTUxGT1JNLgorbWltaWNpbmcgZXZlcnl0aGluZyBmb3IgTU1MRk9STS4K
IAogXHN1YnNlY3Rpb257RmlsZSBzcmMvZG9jL2F4aW9tLmJpYi5wYW1waGxldH0KIApAQCAt
Mjg1LDE0ICsyODUsMTQgQEAKIFRoZSBwdWJsaWNseSBleHBvc2VkIGZ1bmN0aW9ucyBhcmU6
CiAKICAgICBcc3BhZGZ1bntjb2VyY2U6IEUgLSQ+JCBTfSAgVGhpcyBmdW5jdGlvbiBpcyB0
aGUgbWFpbiBvbmUgZm9yIGNvbnZlcnRpbmcKLWFuZCBleHByZXNzaW9uIGluIGRvbWFpbiBP
dXRwdXRGb3JtIGludG8gYSBNYXRoTUwgc3RyaW5nLgorYW4gZXhwcmVzc2lvbiBpbiBkb21h
aW4gT3V0cHV0Rm9ybSBpbnRvIGEgTWF0aE1MIHN0cmluZy4KIAogICAgIFxzcGFkZnVue2Nv
ZXJjZVM6IEUgLSQ+JCBTfSAgVGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGZyb20gdGhlIGNv
bW1hbmQgbGluZS4KIEl0IGNvbnZlcnRzIGFuIE91dHB1dEZvcm0gZXhwcmVzc2lvbiBpbnRv
IGEgTWF0aE1MIHN0cmluZyBhbmQgZG9lcwogc29tZSBmb3JtYXR0aW5nIHNvIHRoYXQgdGhl
IG91dHB1dCBpcyBub3Qgb25lIGxvbmcgbGluZS4gIElmIHlvdSB0YWtlCiB0aGUgb3V0cHV0
IGZyb20gdGhpcyBmdW5jdGlvbiwgc3RpY2sgaXQgaW4gYW4gZW1hY3MgYnVmZmVyIGluCiBu
eG1sLW1vZGUgYW5kIHRoZW4gaW5kZW50IGFjY29yZGluZyB0byBtb2RlLCB5b3UnbGwgZ2V0
IHNvbWV0aGluZyB0aGF0J3MKLW5pY2VyIHRvIGxvb2sgYXQgdGhhbiBjb21lcyBmcm9tIGNv
ZXJjZS4gTm90ZSB0aGF0IGNvZXJjZVMgcmV0dXJucworbmljZXIgdG8gbG9vayBhdCB0aGFu
IHdoYXQgY29tZXMgZnJvbSBjb2VyY2UuIE5vdGUgdGhhdCBjb2VyY2VTIHJldHVybnMKIHRo
ZSBzYW1lIHZhbHVlIGFzIGNvZXJjZSBidXQgaW52b2tlcyBhIGRpc3BsYXkgZnVuY3Rpb24g
YXMgd2VsbCBzbyB0aGF0CiB0aGUgcmVzdWx0IHdpbGwgYmUgcHJpbnRlZCB0d2ljZSBpbiBk
aWZmZXJlbnQgZm9ybWF0cy4gIFRoZSBuZWVkIGZvciB0aGlzCiBpcyB0aGF0IHRoZSBvdXRw
dXQgZnJvbSBjb2VyY2UgaXMgYXV0b21hdGljYWxseSBmb3JtYXR0ZWQgd2l0aCBsaW5lIGJy
ZWFrcwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgaW1wb3J0IExpc3QgT3V0cHV0Rm9ybQog
ICAgIGltcG9ydCBMaXN0IFN0cmluZwogCi0gICAgLS0gbG9jYWwgdmFyaWFibGVzIGRlY2xh
cmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMKKyAgICAtLSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJh
dGlvbnMgYW5kIGRlZmluaXRpb25zCiAKICAgICBleHByOiBFCiAgICAgcHJlYyxvcFByZWM6
IEkKQEAgLTExOTEsMTUgKzExOTEsMzEgQEAKICAgICAgIG51bGwgYXJncyA9PiAiIgogICAg
ICAgcCA6IEkgOj0gcG9zaXRpb24ob3AsbmFyeU9wcykKICAgICAgIHAgPCAxID0+IGVycm9y
ICJ1bmtub3duIG5hcnkgb3AiCi0gICAgICAtLSBuZWVkIHRvIHRlc3QgZm9yICJaQUciIGNh
c2UgYW5kIGRpdmVydCBpdCBoZXJlLCBoZXJlJ3MgYW4KLSAgICAgIC0tIGV4YW1wbGUgaW5j
bHVkaW5nICJvcCIsIHRoZSBhcmdzIGxpc3Qgd291bGQgYmUgdGhlIHJlc3Qgb2YgdGhpcwor
ICAgICAgLS0gbmVlZCB0byB0ZXN0IGZvciAiWkFHIiBjYXNlIGFuZCBkaXZlcnQgaXQgaGVy
ZQorICAgICAgLS0gZXggMS4gY29udGludWVkRnJhY3Rpb24oMzE0MTU5LzEwMDAwMCkKICAg
ICAgIC0tIHt7K317M317e1pBR317MX17N319e3taQUd9ezF9ezE1fX17e1pBR317MX17MX19
e3taQUd9ezF9ezI1fX0KICAgICAgIC0tIHt7WkFHfXsxfXsxfX17e1pBR317MX17N319e3ta
QUd9ezF9ezR9fX0KLSAgICAgIC0tIFRoZSBmaXJzdCBhcmcsIHRoZSAiMyIgaW4gdGhpcyBj
YXNlLCBjb3VsZCBiZSBhICJaQUciIG9yIHNvbWV0aGluZworICAgICAgLS0gdGhpcyBpcyB0
aGUgcHJlY29uZGl0aW9uZWQgb3V0cHV0IGZvcm0KKyAgICAgIC0tIGluY2x1ZGluZyAib3Ai
LCB0aGUgYXJncyBsaXN0IHdvdWxkIGJlIHRoZSByZXN0IG9mIHRoaXMKKyAgICAgIC0tIGku
ZSBvcCA9ICcrJyBhbmQgYXJncyA9IHt7M317e1pBR317MX17N319e3taQUd9ezF9ezE1fX0K
KyAgICAgIC0tIHt7WkFHfXsxfXsxfX17e1pBR317MX17MjV9fXt7WkFHfXsxfXsxfX17e1pB
R317MX17N319e3taQUd9ezF9ezR9fX0KKyAgICAgIC0tIGV4IDIuIGNvbnRpbnVlZEZyYWN0
aW9uKDE0MTU5LzEwMDAwMCkKKyAgICAgIC0tIHRoaXMgb25lIGRvZXNuJ3QgaGF2ZSB0aGUg
bGVhZGluZyBpbnRlZ2VyCisgICAgICAtLSB7eyt9e3taQUd9ezF9ezd9fXt7WkFHfXsxfXsx
NX19e3taQUd9ezF9ezF9fXt7WkFHfXsxfXsyNX19CisgICAgICAtLSB7e1pBR317MX17MX19
e3taQUd9ezF9ezd9fXt7WkFHfXsxfXs0fX19CisgICAgICAtLQorICAgICAgLS0gZXggMy4g
Y29udGludWVkRnJhY3Rpb24oMyxyZXBlYXRpbmcgWzFdLCByZXBlYXRpbmcgWzMsNl0pCisg
ICAgICAtLSB7eyt9ezN9e3taQUd9ezF9ezN9fXt7WkFHfXsxfXs2fX17e1pBR317MX17M319
e3taQUd9ezF9ezZ9fQorICAgICAgLS0ge3taQUd9ezF9ezN9fXt7WkFHfXsxfXs2fX17e1pB
R317MX17M319e3taQUd9ezF9ezZ9fQorICAgICAgLS0ge3taQUd9ezF9ezN9fXt7WkFHfXsx
fXs2fX17Li4ufX0KKyAgICAgIC0tIEluIGVhY2ggb2YgdGhlc2UgZXhhbXBsZXMgdGhlIGFy
Z3MgbGlzdCBjb25zaXN0cyBvZiB0aGUgdGVybXMKKyAgICAgIC0tIGZvbGxvd2luZyB0aGUg
JysnIG9wCisgICAgICAtLSBzbyB0aGUgZmlyc3QgYXJnIGNvdWxkIGJlIGEgIlpBRyIgb3Ig
c29tZXRoaW5nCiAgICAgICAtLSBlbHNlLCBidXQgdGhlIHNlY29uZCBhcmcgbG9va3MgbGlr
ZSBpdCBoYXMgdG8gYmUgIlpBRyIsIHNvIG1heWJlCi0gICAgICAtLSB0ZXN0IGZvciAjYXJn
cyA+IDEgYW5kIGFyZ3MuMiBpcyAiWkFHIi4KLSAgICAgIC0tIFRoaXMgdGVzdCBzaG91bGQg
d29yayBzbyBsb25nIGFzIGF4aW9tIGRvZXNuJ3QgdHJ5IHRvIGV2YWx1YXRlCi0gICAgICAt
LSB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlICJhbmQiIHdoZW4gdGhlIGZpcnN0IGhhbGYgaXMg
ZmFsc2UuCisgICAgICAtLSB0ZXN0IGZvciAjYXJncyA+IDEgYW5kIGFyZ3MuMiBjb250YWlu
cyAiWkFHIi4KKyAgICAgIC0tIE5vdGUgdGhhdCBzaW5jZSB0aGUgcmVzdWx0aW5nIE1hdGhN
TCA8bWZyYWM+cyBhcmUgbmVzdGVkIHdlIG5lZWQKKyAgICAgIC0tIHRvIGhhbmRsZSB0aGUg
d2hvbGUgY29udGludWVkIGZyYWN0aW9uIGF0IG9uY2UsIGkuZS4gd2UgY2FuJ3QKKyAgICAg
IC0tIGp1c3QgbG9vayBmb3IsIGUuZy4sIHt7WkFHfXsxfXs2fX0KICAgICAgICgjYXJncyA+
IDEpIGFuZCAocG9zaXRpb24oIlpBRyIsc3RyaW5naWZ5IGZpcnN0IHJlc3QgYXJncywxKSA+
IDApID0+CiAJICAgdG1wUyA6IFMgOj0gc3RyaW5naWZ5IGZpcnN0IGFyZ3MKIAkgICBwb3Np
dGlvbigiWkFHIix0bXBTLDEpID4gMCA9PiBmb3JtYXRaYWcoYXJncykKQEAgLTEyMjQsMTEg
KzEyNDAsMTcgQEAKICAgICAgIHMKIAogICAgIGZvcm1hdFphZyhhcmdzIDogTCBFKSA6IFMg
PT0KLSAgICAtLSB7e1pBR317MX17N319CisgICAgLS0gYXJncyB3aWxsIGJlIGEgbGlzdCBv
ZiB0aGluZ3MgbGlrZSB0aGlzIHt7WkFHfXsxfXs3fX0sIHRoZSBaQUcKKyAgICAtLSBtdXN0
IGJlIHRoZXJlLCB0aGUgJzEnIGFuZCAnNycgY291bGQgY29uY2VpdmFibHkgYmUgbW9yZSBj
b21wbGV4CisgICAgLS0gZXhwcmVzc2lvbnMKICAgICAgIHRtcFphZyA6IEwgRSA6PSBmaXJz
dCBhcmdzIHByZXRlbmQgTCBFCisgICAgICAtLSBtYXkgd2FudCB0byB0ZXN0IHRoYXQgdG1w
WmFnIGNvbnRhaW5zICdaQUcnCiAgICAgICAjYXJncyA+IDEgPT4gIjxtZnJhYz4iZm9ybWF0
TW1sKGZpcnN0IHJlc3QgdG1wWmFnLG1pblByZWMpIjxtcm93Pjxtbj4iZm9ybWF0TW1sKGZp
cnN0IHJlc3QgcmVzdCB0bXBaYWcsbWluUHJlYykiPC9tbj48bW8+KzwvbW8+ImZvcm1hdFph
ZyhyZXN0IGFyZ3MpIjwvbXJvdz48L21mcmFjPiIKLSAgICAgICI8bWZyYWM+ImZvcm1hdE1t
bChmaXJzdCByZXN0IHRtcFphZyxtaW5QcmVjKWZvcm1hdE1tbChmaXJzdCByZXN0IHJlc3Qg
dG1wWmFnLG1pblByZWMpIjwvbWZyYWM+IgotICAgICAgCisgICAgICAoZmlyc3QgYXJncyA9
ICIuLi4iOjpFKUBCb29sZWFuID0+ICI8bW8+JiN4MjAyNjs8L21vPiIKKyAgICAgIHBvc2l0
aW9uKCJaQUciLHN0cmluZ2lmeSBmaXJzdCBhcmdzLDEpID4gMCA9PgorICAgICAgICAgICI8
bWZyYWM+ImZvcm1hdE1tbChmaXJzdCByZXN0IHRtcFphZyxtaW5QcmVjKWZvcm1hdE1tbChm
aXJzdCByZXN0IHJlc3QgdG1wWmFnLG1pblByZWMpIjwvbWZyYWM+IiAgICAgIAorICAgICAg
IjxtdGV4dD5mb3JtYXRaYWc6IFVuZXhwZWN0ZWQga2luZCBvZiBaQUc8L210ZXh0PiIKKwog
ICAgIGZvcm1hdFphZzEoYXJncyA6IEwgRSkgOiBTID09CiAgICAgLS0gbWFrZSBhbHRlcm5h
dGl2ZSBaQUcgZm9ybWF0IHdpdGhvdXQgZGltaW5pc2hpbmcgZm9udHMsIG1heWJlCiAgICAg
LS0gdXNlIGEgdGFibGUKQEAgLTEyODUsNiArMTMwNywxMCBAQAogCSAgLS0gd2hlcmUgaXQg
YXJpc2VzLiAgUmVtb3ZlZCAyMDA3LTAyLTE0CiAgICAgICAgICAgY29uY2F0KGNvbmNhdCgi
PG10ZXh0PiIsc3RyKSwiPC9tdGV4dD4iKQogCS0tIGlmIHdlIGdldCB0byBoZXJlIGRvZXMg
dGhhdCBtZWFuIGl0J3MgYSB2YXJpYWJsZT8KKwktLSB0ZXN0IGZvciBzb21ldGhpbmcgbGlr
ZSAjXEEgYW5kIHN0cmlwIG9mZiAjXAorCXN0ci4xID0gY2hhciAiIyIgYW5kIHN0ci4yID0g
Y2hhciAiXCIgPT4KKwkgICAgdSA6IFVTIDo9IHNlZ21lbnQoMyxsZW4pJFVTCisJICAgIGNv
bmNhdCBbIjxtaT4iLHN0ci51LCI8L21pPiJdCiAgICAgICAgIGNvbmNhdCBbIjxtaT4iLHN0
ciwiPC9taT4iXQogICAgICAgbCA6IEwgRSA6PSAoZXhwciBwcmV0ZW5kIEwgRSkKICAgICAg
IG51bGwgbCA9PiBibGFuawo=

----ad764d1f95112f073c30--

\start
Date: Fri, 14 Dec 2007 18:46:52 -0800 (PST)
From: Tim Daly
To: sage-devel <sage-devel@googlegroups.com>
Subject: Re: Sage and Special Functions??

in the first paragraph s/chunck/chunk/
page 3 s/fucntions/functions/


The DLMF copyright section states:

The material on this site is copyrighted ((c)) by NIST and/or the
respective authors, and subject to the usual copyright restrictions.

Does that imply DLMF can be used by open source programs?
If the copyrights remain with the authors rather than with NIST
it might not be possible to use the electronic form without
permission.

Are you planning to show implementations of the functions
using multiple systems (ala CATS) or using a sage+single
underlying system?

I did validation and verification of solutions to a couple of the
tables of integrals presented by the early edition of Spiegel's
mathematical handbook using Axiom. Several of the more
complex functions turned out to be in error. Curiously they
were dropped from the latest Schaums version. The validation
of the tables took a significant amount of time and effort
because the computer solution and the hand solution often
differed wildly. Proving they were equal (or not) took a fair amount
of manipulation.

Another particularly challenging aspect is the handling of the
provisos. That is, the clauses like
  1/x provided x <>  0
and their propagation, manipulation, and combination  thru the
validation of the computer proof.

That said, I hope that you get such a proposal funded. I think it
is vitally important to get some reference version of computational
mathematics in electronic form. A common set of standards (e.g.
branch cuts), whether -7 is prime, etc. needs to be established
and agreed upon. I suspect that the effort to try to validate DLMF
will highlight these fundamental issues since they are almost
certainly not constant in the DLMF.

Tim

On Dec 14, 8:29 pm, "William Stein" <wst...@gmail.com> wrote:
> Hi,
>
> This is a (very short!) Sage proposal that we're putting together for
> NSF.   It's
> getting close to being finished.  Any comments, including on typos are welcome:
>
>    http://wstein.org/grants/2007-cdi-reinhardt/

\start
Date: Fri, 14 Dec 2007 18:55:01 -0800
From: William Stein
To: list
Subject: Re: [sage-devel] Re: Sage and Special Functions??
Cc: Bill Reinhardt

Tim,

Many thanks for your thoughts about the proposal!

On Dec 14, 2007 6:46 PM, Tim Daly wrote:
>
> in the first paragraph s/chunck/chunk/
> page 3 s/fucntions/functions/
>
>
> The DLMF copyright section states:
>
> The material on this site is copyrighted ((c)) by NIST and/or the
> respective authors, and subject to the usual copyright restrictions.
>
> Does that imply DLMF can be used by open source programs?
> If the copyrights remain with the authors rather than with NIST
> it might not be possible to use the electronic form without
> permission.

We are actually in close communication with NIST, so no matter
what there wouldn't be any use of their materials without their permissions.
Reinhardt has been deeply involved in the DLMF project from the start
10 years ago...

> Are you planning to show implementations of the functions
> using multiple systems (ala CATS) or using a sage+single
> underlying system?

Multiple systems.

> I did validation and verification of solutions to a couple of the
> tables of integrals presented by the early edition of Spiegel's
> mathematical handbook using Axiom. Several of the more
> complex functions turned out to be in error. Curiously they
> were dropped from the latest Schaums version. The validation
> of the tables took a significant amount of time and effort
> because the computer solution and the hand solution often
> differed wildly. Proving they were equal (or not) took a fair amount
> of manipulation.

We'll definitely consult with you if we get funded!


> Another particularly challenging aspect is the handling of the
> provisos. That is, the clauses like
>   1/x provided x <>  0
> and their propagation, manipulation, and combination  thru the
> validation of the computer proof.
>
> That said, I hope that you get such a proposal funded. I think it
> is vitally important to get some reference version of computational
> mathematics in electronic form. A common set of standards (e.g.
> branch cuts), whether -7 is prime, etc. needs to be established
> and agreed upon. I suspect that the effort to try to validate DLMF
> will highlight these fundamental issues since they are almost
> certainly not constant in the DLMF.

\start
Date: Sat, 15 Dec 2007 21:39:58 -0800
From: Arthur Ralfs
To: list
Subject: mathml leftHandLimit=~failed~

Tim,

When I execute limit(x*log(x),x=0) I get the correct rendering
leftHandLimit="failed".; Are you still seeing the same thing?

\start
Date: Sat, 15 Dec 2007 11:05:52 -0600
From: Tim Daly
To: list
Subject: 20071215.02.tpd.patch

This patch fixes minor issues with the 20071215.01.tpd.patch changeset.

The bookvol11 document buidling stanza moved to the wrong directory
and thus cannot find the axiomfront.ps file.

The user/group information in the axbook.tgz file was wrong.

Tim

=======================================================================
diff --git a/changelog b/changelog
index 684be9c..6d3b0b6 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20071215 tpd src/hyper/Makefile fix typo in bookvol11 building stanza
+20071215 tpd src/hyper/axbook.tgz fix the user/group settings
 20071215 tpd src/interp/bookvol5 browse and top-level command handling
 20071215 tpd src/interp/setq.lisp move command initialization to bookvol5
 20071215 tpd src/interp/nci.lisp move ncloopInclude to bookvol5
diff --git a/src/hyper/Makefile.pamphlet b/src/hyper/Makefile.pamphlet
index 7d43f87..39c9ea8 100644
--- a/src/hyper/Makefile.pamphlet
+++ b/src/hyper/Makefile.pamphlet
@@ -1114,7 +1114,7 @@ ${HYPER}/doctitle.png: ${IN}/doctitle.png
 ${MNT}/${SYS}/doc/bookvol11.dvi: ${IN}/bookvol11.pamphlet 
 	@ echo 153 making ${MNT}/${SYS}/doc/bookvol11.dvi \
             from ${IN}/bookvol11.pamphlet
-	@ ( cd ${MNT}/${SYS} ; \
+	@ ( cd ${MNT}/${SYS}/doc ; \
 	    cp ${IN}/bookvol11.pamphlet . ; \
 	    ${DOCUMENT} ${NOISE} bookvol11 ; \
 	    rm -f bookvol11.pamphlet ; \
@@ -1125,7 +1125,7 @@ ${MNT}/${SYS}/doc/bookvol11.dvi: ${IN}/bookvol11.pamphlet
 @
 <<axbook>>=
 ${HYPER}/axbook/book-index.xhtml: ${IN}/axbook.tgz
-	@ echo 154 making ${HYPER}/axbook/*.xhtml from ${IN}/axbook.tgz
+	@ echo 154 making ${HYPER}/axbook/xhtml from ${IN}/axbook.tgz
 	@( cd ${HYPER} ; tar -zxf ${IN}/axbook.tgz )
 
 @
diff --git a/src/hyper/axbook.tgz b/src/hyper/axbook.tgz
index 2baf4bb..1f24460 100644
Binary files a/src/hyper/axbook.tgz and b/src/hyper/axbook.tgz differ



\start
Date: Sun, 16 Dec 2007 01:29:22 -0600
From: Tim Daly
To: list
Subject: 20071216.01.tpd.patch,	20071216.02.tpd.patch (7045)

This patch adds -lXpm to the loader flags for gentoo systems.
To use this on gentoo builds set your Axiom variable with a
basename of gentoo thus:

  cd (whereever)
  export AXIOM=`pwd`/mnt/gentoo
  export PATH=$AXIOM/bin:$PATH


Actually there are two patches here because I made a mistake and made
the changes in the Makefile for the Aldor git branch rather than the
gentoo git branch. The second patch unwinds the first and gets it right.
sigh.

Tim

===========================================================================
20071216.01.tpd.patch
==========================================================================
diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index 9603823..5f2bd15 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -57,6 +57,8 @@ clean:
 	@ rm -f lsp/Makefile.dvi
 	@ rm -f lsp/Makefile
 	@ rm -rf lsp/gcl*
+	@ rm -rf aldor
+        @ rm -f license/license.aldor
 	@ rm -f noweb 
 	@ rm -f trace
 	@ rm -f Makefile.${SYS}
@@ -78,7 +80,7 @@ Makefile in the mnt/sys/bin directory as the trigger to prevent
 duplicate execution of this stanza.
 <<literate commands>>=
 ${MNT}/${SYS}/bin/document:
-	@echo 0 ${ENV}
+	@echo 9 ${ENV}
 	@echo 10 copying ${SRC}/scripts to ${MNT}/${SYS}/bin
 	@cp -pr ${SRC}/scripts/* ${MNT}/${SYS}/bin
 
@@ -298,6 +300,7 @@ SYS=$(notdir $(AXIOM))
 SPAD=${SPD}/mnt/${SYS}
 LSP=${SPD}/lsp
 <<GCLVERSION>>
+<<ALDOR ENV>>
 AWK=gawk
 GCLDIR=${LSP}/${GCLVERSION}
 SRC=${SPD}/src
@@ -324,8 +327,9 @@ ENV= SPAD=${SPAD} SYS=${SYS} SPD=${SPD} LSP=${LSP} GCLDIR=${GCLDIR} \
      SPADBIN=${SPADBIN} INC=${INC} CCLBASE=${CCLBASE} PART=${PART} \
      SUBPART=${SUBPART} NOISE=${NOISE} GCLVERSION=${GCLVERSION} \
      TANGLE=${TANGLE} VERSION=${VERSION} PATCH=${PATCH} DOCUMENT=${DOCUMENT} \
-     WEAVE=${WEAVE}
-
+     WEAVE=${WEAVE} \
+     ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+     ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 @
 \subsection{rootdirs}
 Note that the -p (parent) option to mkdir will make all intermediate
@@ -359,7 +363,7 @@ run latex over the pamphlet file.
 
 <<book>>=
 book:
-	@ echo 79 building the book as ${MNT}/${SYS}/doc/book.dvi 
+	@ echo 13 building the book as ${MNT}/${SYS}/doc/book.dvi 
 	@ mkdir -p ${TMP}
 	@ mkdir -p ${MNT}/${SYS}/doc
 	@ cp ${SRC}/doc/book.pamphlet ${MNT}/${SYS}/doc
@@ -376,7 +380,7 @@ book:
 	  rm book.toc ; \
 	  rm book.log ; \
 	  rm book.aux )
-	@ echo 80 The book is at ${MNT}/${SYS}/doc/book.dvi 
+	@ echo 14 The book is at ${MNT}/${SYS}/doc/book.dvi 
 
 @
 \subsection{noweb}
@@ -432,7 +436,7 @@ because this is not a source file.
 \end{verbatim}
 <<noweb>>=
 noweb:
-	@echo 13 making noweb
+	@echo 15 making noweb
 	@mkdir -p ${OBJ}/noweb
 	@mkdir -p ${TMP}
 	@mkdir -p ${MNT}/${SYS}/bin/lib
@@ -446,10 +450,10 @@ noweb:
 	${ENV} ${MAKE} BIN=${MNT}/${SYS}/bin/lib LIB=${MNT}/${SYS}/bin/lib \
                 MAN=${MNT}/${SYS}/bin/man \
                 TEXINPUTS=${MNT}/${SYS}/bin/tex all install >${TMP}/trace )
-	@echo The file marks the fact that noweb has been made > noweb
+	@echo 16 The file marks the fact that noweb has been made > noweb
 
 nowebclean:
-	@echo 14 cleaning ${OBJ}/noweb
+	@echo 17 cleaning ${OBJ}/noweb
 	@rm -rf ${OBJ}/noweb
 	@rm -f noweb
 
@@ -461,22 +465,22 @@ We should recompile the world with the .fn information but not here.
 	    do echo $$i ; touch $$i ; done )
 	( for i in `find . -name "*.lisp"` ; \
 	    do echo $$i ; touch $$i ; done )
-	@echo 15a remaking ${SRC}/interp for performance
+	@echo 18 remaking ${SRC}/interp for performance
 	@(cd src ; ${ENV} ${MAKE} )
 \end{verbatim}
 <<src>>=
 srcdir: rootdirs ${SPD}/src/Makefile
-	@echo 15 making ${SPD}/src 
+	@echo 19 making ${SPD}/src 
 	@( cd src ; ${ENV} ${MAKE} )
 
 ${SPD}/src/Makefile: ${SPD}/src/Makefile.pamphlet
-	@echo 16 making ${SPD}/src/Makefile from ${SPD}/src/Makefile.pamphlet
+	@echo 20 making ${SPD}/src/Makefile from ${SPD}/src/Makefile.pamphlet
 	@( cd src ; \
 	   ${DOCUMENT} ${NOISE} Makefile ; \
 	   cp Makefile.dvi ${MNT}/${SYS}/doc/src/src.Makefile.dvi )
 
 libspadclean:
-	@echo 17 cleaning ${OBJ}/${SYS}/lib	
+	@echo 21 cleaning ${OBJ}/${SYS}/lib	
 	@rm -rf ${OBJ}/${SYS}/lib	
 	@( cd src ; ${DOCUMENT} ${NOISE} Makefile )
 	@( cd src ; ${ENV} ${MAKE} clean )
@@ -487,7 +491,7 @@ libspadclean:
 \subsection{src setup}
 <<srcsetup>>=
 srcsetup: rootdirs ${SPD}/src/Makefile
-	@echo 18 making ${SPD}/src 
+	@echo 22 making ${SPD}/src 
 	@( cd src ; ${ENV} ${MAKE} setup )
 
 @
@@ -516,7 +520,7 @@ then the Makefile is rewritten to extract the later version.
 It looks for a chunk name that matches the version number.
 <<LSPMakefile>>=
 ${LSP}/Makefile: ${LSP}/Makefile.pamphlet
-	@echo 20 making ${LSP}/Makefile from ${LSP}/Makefile.pamphlet
+	@echo 23 making ${LSP}/Makefile from ${LSP}/Makefile.pamphlet
 	@( cd lsp ; \
 	 ${DOCUMENT} ${NOISE} Makefile ; \
 	 if [ "${GCLVERSION}" != "gcl-2.4.1" ] ; then \
@@ -541,7 +545,7 @@ more efficient. The [[sys-proclaims]] file contains type information
 about standard common lisp function calls.
 <<lsp>>=
 lspdir: rootdirs ${MNT}/${SYS}/bin/document ${LSP}/Makefile
-	@echo 19 making ${LSP}
+	@echo 24 making ${LSP}
 	@mkdir -p ${OBJ}/${SYS}/bin
 	@mkdir -p ${OBJ}/${SYS}/lsp
 	@(cd lsp ; ${ENV} ${MAKE} gcldir )
@@ -549,7 +553,7 @@ lspdir: rootdirs ${MNT}/${SYS}/bin/document ${LSP}/Makefile
 
 <<LSPMakefile>>
 lspclean:
-	@echo 21 cleaning ${OBJ}/${SYS}/ccl
+	@echo 25 cleaning ${OBJ}/${SYS}/ccl
 	@rm -rf ${LSP}/${GCLVERSION}
 	@rm -rf ${INT}/ccl
 	@rm -rf ${OBJ}/${SYS}/ccl
@@ -557,10 +561,43 @@ lspclean:
 	@rm -f ${LSP}/Makefile ${LSP}/Makefile.dvi
 
 @
+\subsection{aldor}
+Aldor is handled like lisp, that is, it is not part of Axiom but is
+built from a tar-gzipped version that is cached in the zips
+directory. We untar the file into the src directory, cd to that
+location, and let aldor build itself. As new versions are released
+they will be kept in zips on a rolling basis, the current and next
+previous versions. All patches for all versions will also be kept.
+
+The ALDOR\_PROJECT variable points to the source location for the Aldor
+compiler installation. Aldor gets untarred in the top level directory so
+<<ALDOR ENV>>=
+ALDORVERSION070901
+ALDOR_PROJECT=${SPD}/aldor
+ALDOR_INSTALL=${AXIOM}
+GENERIC_DIR=${AXIOM}
+@
+
+Finally we copy the parts we care about into the appropriate locations.
+
+\subsection{aldor}
+<<aldor>>=
+aldordir: 
+	@echo 26 making ${SPD}/aldor version ${ALDORVERSION}
+	@( cd ${SPD} ; \
+           tar -zxf ${ZIPS}/aldor.${ALDORVERSION}.tgz ; \
+	   cd aldor ; \
+	   patch <${ZIPS}/aldor.${ALDORVERSION}.Makefile.globals.patch ; \
+           ${ENV} ${MAKE} aldorcompiler ; \
+           cd aldor ; \
+	   cp ${SPD}/aldor/LICENSE license/license.aldor ; \
+           cp ${SPD}/aldor/pdfs/* ${AXIOM}/doc )
+
+@
 \subsection{install}
 <<install>>=
 install:
-	@echo 78 installing Axiom in ${DESTDIR}
+	@echo 27 installing Axiom in ${DESTDIR}
 	@mkdir -p ${DESTDIR}
 	@cp -pr ${MNT} ${DESTDIR}
 	@echo '#!/bin/sh -' >${COMMAND}
@@ -570,7 +607,7 @@ install:
 	@echo export PATH >>${COMMAND}
 	@cat ${INT}/sman/axiom >>${COMMAND}
 	@chmod +x ${COMMAND}
-	@echo 79 Axiom installation finished.
+	@echo 28 Axiom installation finished.
 	@echo
 	@echo Please add $(shell dirname ${COMMAND}) to your PATH variable
 	@echo Start Axiom with the command $(shell basename ${COMMAND})
@@ -591,7 +628,7 @@ sure the [[INT/DOC/LSP]] and [[INT/DOC/SRC]] directories exist.
 
 <<document>>=
 document: rootdirs
-	@echo 22 documenting files
+	@echo 29 documenting files
 	@mkdir -p ${INT}/doc/lsp
 	@mkdir -p ${INT}/doc/src
 	@(cd lsp ; ${ENV} ${MAKE} document )
@@ -601,8 +638,8 @@ document: rootdirs
 \subsection{clean}
 <<clean>>=
 clean: 
-	@ echo 7 making a ${SYS} system, PART=${PART} SUBPART=${SUBPART}
-	@ echo 8 Environment ${ENV}
+	@ echo 30 making a ${SYS} system, PART=${PART} SUBPART=${SUBPART}
+	@ echo 31 Environment ${ENV}
 	@ rm -f lsp/Makefile.dvi
 	@ rm -f lsp/Makefile
 	@ rm -f noweb 
@@ -804,19 +841,24 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 24 Makefile.axposf1v3 called
-	@echo 25 Environment : ${ENV} 
-	@echo 26 finished system build on `date` | tee >lastBuildDate
 
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 32 Makefile.axposf1v3 called
+	@echo 33 Environment : ${ENV} 
+	@echo 34 finished system build on `date` | tee >lastBuildDate
+
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -850,19 +892,24 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP}  DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 27 Makefile.axposf1v4 called
-	@echo 28 Environment : ${ENV} 
-	@echo 29 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 35 Makefile.axposf1v4 called
+	@echo 36 Environment : ${ENV} 
+	@echo 37 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -896,19 +943,24 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP}  DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 30 Makefile.hp10 called
-	@echo 31 Environment : ${ENV} 
-	@echo 32 finished system build on `date` | tee >lastBuildDate
 
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 38 Makefile.hp10 called
+	@echo 39 Environment : ${ENV} 
+	@echo 40 finished system build on `date` | tee >lastBuildDate
+
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -942,19 +994,24 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 33 Makefile.hp11 called
-	@echo 34 Environment : ${ENV} 
-	@echo 35 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 41 Makefile.hp11 called
+	@echo 42 Environment : ${ENV} 
+	@echo 43 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -988,19 +1045,24 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 36 Makefile.hp9 called
-	@echo 37 Environment : ${ENV} 
-	@echo 38 finished system build on `date` | tee >lastBuildDate
 
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 44 Makefile.hp9 called
+	@echo 45 Environment : ${ENV} 
+	@echo 46 finished system build on `date` | tee >lastBuildDate
+
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1034,19 +1096,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 39 Makefile.irixmips1 called
-	@echo 40 Environment : ${ENV} 
-	@echo 41 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 47 Makefile.irixmips1 called
+	@echo 48 Environment : ${ENV} 
+	@echo 49 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1079,19 +1145,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 42 Makefile.irixmips3 called
-	@echo 43 Environment : ${ENV} 
-	@echo 44 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 50 Makefile.irixmips3 called
+	@echo 51 Environment : ${ENV} 
+	@echo 52 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1131,19 +1201,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} TANGLE=${TANGLE}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} TANGLE=${TANGLE} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.FreeBSD called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 53 Makefile.FreeBSD called
+	@echo 54 Environment : ${ENV} 
+	@echo 55 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1184,19 +1258,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 SRCDIRS=bootdir interpdir sharedir algebradir etcdir docdir inputdir
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.windows called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 56 Makefile.windows called
+	@echo 57 Environment : ${ENV} 
+	@echo 58 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1245,19 +1323,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 59 Makefile.linux called
+	@echo 60 Environment : ${ENV} 
+	@echo 61 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1320,19 +1402,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 62 Makefile.fedora5 called
+	@echo 63 Environment : ${ENV} 
+	@echo 64 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1395,19 +1481,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 65 Makefile.fedora6 called
+	@echo 66 Environment : ${ENV} 
+	@echo 67 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1470,19 +1560,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 68 Makefile.fedora7 called
+	@echo 69 Environment : ${ENV} 
+	@echo 70 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1545,19 +1639,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 71 Makefile.fedora8 called
+	@echo 72 Environment : ${ENV} 
+	@echo 73 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1577,6 +1675,8 @@ on which is available. This varies at different stages of the build.
 
 We've modified the [[GCLOPTS]] variable because [[bfd]] does not seem
 to work on Solaris 9. So we use a local version shipped with GCL.
+
+The gentoo build needs -lXpm on the loader flags (LDF).
 <<Makefile.gentoo>>=
 # System dependent Makefile for the Intel/Linux/Gentoo platform
 # Platform variable
@@ -1584,7 +1684,7 @@ PLF=LINUXplatform
 # C compiler flags
 CCF="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE -D${PLF} -I/usr/X11/include"
 # Loader flags
-LDF= -L/usr/X11R6/lib 
+LDF= -L/usr/X11R6/lib -lXpm
 # C compiler to use
 CC=gcc 
 AWK=gawk
@@ -1599,19 +1699,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 74 Makefile.gentoo called
+	@echo 75 Environment : ${ENV} 
+	@echo 76 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1650,19 +1754,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 77 Makefile.fedora64 called
+	@echo 78 Environment : ${ENV} 
+	@echo 79 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1697,19 +1805,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 80 Makefile.fedora3 called
+	@echo 81 Environment : ${ENV} 
+	@echo 82 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1744,19 +1856,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 48 Makefile.linuxglibc called
-	@echo 49 Environment : ${ENV} 
-	@echo 50 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 83 Makefile.linuxglibc called
+	@echo 84 Environment : ${ENV} 
+	@echo 85 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1790,19 +1906,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 51 Makefile.linuxglibc2.1 called
-	@echo 52 Environment : ${ENV} 
-	@echo 53 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 86 Makefile.linuxglibc2.1 called
+	@echo 87 Environment : ${ENV} 
+	@echo 88 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1841,19 +1961,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=gpatch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 89 Makefile.solaris9 called
+	@echo 90 Environment : ${ENV} 
+	@echo 91 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1887,19 +2011,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 54 Makefile.rs6000aix3 called
-	@echo 55 Environment : ${ENV} 
-	@echo 56 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 92 Makefile.rs6000aix3 called
+	@echo 93 Environment : ${ENV} 
+	@echo 94 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1933,19 +2061,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 57 Makefile.rs6000aix4 called
-	@echo 58 Environment : ${ENV} 
-	@echo 59 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 95 Makefile.rs6000aix4 called
+	@echo 96 Environment : ${ENV} 
+	@echo 97 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1979,19 +2111,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 60 Makefile.rs6000aix4.1 called
-	@echo 61 Environment : ${ENV} 
-	@echo 62 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 98 Makefile.rs6000aix4.1 called
+	@echo 99 Environment : ${ENV} 
+	@echo 100 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2025,19 +2161,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 63 Makefile.rs6000aix4.3 called
-	@echo 64 Environment : ${ENV} 
-	@echo 65 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 101 Makefile.rs6000aix4.3 called
+	@echo 102 Environment : ${ENV} 
+	@echo 103 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2072,19 +2212,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 66 Makefile.sun4os55c called
-	@echo 67 Environment : ${ENV} 
-	@echo 68 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 104 Makefile.sun4os55c called
+	@echo 105 Environment : ${ENV} 
+	@echo 106 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2118,19 +2262,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 69 Makefile.sun4os55g called
-	@echo 70 Environment : ${ENV} 
-	@echo 71 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 107 Makefile.sun4os55g called
+	@echo 108 Environment : ${ENV} 
+	@echo 109 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2165,19 +2313,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 72 Makefile.sun4os58c called
-	@echo 73 Environment : ${ENV} 
-	@echo 74 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 110 Makefile.sun4os58c called
+	@echo 111 Environment : ${ENV} 
+	@echo 112 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2211,19 +2363,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 75 Makefile.sung called
-	@echo 76 Environment : ${ENV} 
-	@echo 77 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir
+	@echo 113 Makefile.sung called
+	@echo 114 Environment : ${ENV} 
+	@echo 115 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2274,19 +2430,23 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-CUSTRELOC>>
+<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
+    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
+    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
 
-all: rootdirs noweb srcsetup lspdir srcdir
-	@echo 45 Makefile.linux called
-	@echo 46 Environment : ${ENV} 
-	@echo 47 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir aldordir srcdir 
+	@echo 116 Makefile.MACOSX called
+	@echo 117 Environment : ${ENV} 
+	@echo 118 finished system build on `date` | tee >lastBuildDate
 
+<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
diff --git a/changelog b/changelog
index 09919c7..4e3d1bd 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071216 cys Makefile add -lXpm to loader flags (7045)
 20071215 gxv src/graph/viewman/makegraph.c discardGraph free corrected (7023)
 20071215 tpd src/hyper/Makefile fix typo in bookvol11 building stanza
 20071215 tpd src/hyper/axbook.tgz fix the user/group settings



===========================================================================
20071216.02.tpd.patch
===========================================================================
diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index 5f2bd15..663f9f3 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -57,8 +57,6 @@ clean:
 	@ rm -f lsp/Makefile.dvi
 	@ rm -f lsp/Makefile
 	@ rm -rf lsp/gcl*
-	@ rm -rf aldor
-        @ rm -f license/license.aldor
 	@ rm -f noweb 
 	@ rm -f trace
 	@ rm -f Makefile.${SYS}
@@ -80,7 +78,7 @@ Makefile in the mnt/sys/bin directory as the trigger to prevent
 duplicate execution of this stanza.
 <<literate commands>>=
 ${MNT}/${SYS}/bin/document:
-	@echo 9 ${ENV}
+	@echo 0 ${ENV}
 	@echo 10 copying ${SRC}/scripts to ${MNT}/${SYS}/bin
 	@cp -pr ${SRC}/scripts/* ${MNT}/${SYS}/bin
 
@@ -300,7 +298,6 @@ SYS=$(notdir $(AXIOM))
 SPAD=${SPD}/mnt/${SYS}
 LSP=${SPD}/lsp
 <<GCLVERSION>>
-<<ALDOR ENV>>
 AWK=gawk
 GCLDIR=${LSP}/${GCLVERSION}
 SRC=${SPD}/src
@@ -327,9 +324,8 @@ ENV= SPAD=${SPAD} SYS=${SYS} SPD=${SPD} LSP=${LSP} GCLDIR=${GCLDIR} \
      SPADBIN=${SPADBIN} INC=${INC} CCLBASE=${CCLBASE} PART=${PART} \
      SUBPART=${SUBPART} NOISE=${NOISE} GCLVERSION=${GCLVERSION} \
      TANGLE=${TANGLE} VERSION=${VERSION} PATCH=${PATCH} DOCUMENT=${DOCUMENT} \
-     WEAVE=${WEAVE} \
-     ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-     ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+     WEAVE=${WEAVE}
+
 @
 \subsection{rootdirs}
 Note that the -p (parent) option to mkdir will make all intermediate
@@ -363,7 +359,7 @@ run latex over the pamphlet file.
 
 <<book>>=
 book:
-	@ echo 13 building the book as ${MNT}/${SYS}/doc/book.dvi 
+	@ echo 79 building the book as ${MNT}/${SYS}/doc/book.dvi 
 	@ mkdir -p ${TMP}
 	@ mkdir -p ${MNT}/${SYS}/doc
 	@ cp ${SRC}/doc/book.pamphlet ${MNT}/${SYS}/doc
@@ -380,7 +376,7 @@ book:
 	  rm book.toc ; \
 	  rm book.log ; \
 	  rm book.aux )
-	@ echo 14 The book is at ${MNT}/${SYS}/doc/book.dvi 
+	@ echo 80 The book is at ${MNT}/${SYS}/doc/book.dvi 
 
 @
 \subsection{noweb}
@@ -436,7 +432,7 @@ because this is not a source file.
 \end{verbatim}
 <<noweb>>=
 noweb:
-	@echo 15 making noweb
+	@echo 13 making noweb
 	@mkdir -p ${OBJ}/noweb
 	@mkdir -p ${TMP}
 	@mkdir -p ${MNT}/${SYS}/bin/lib
@@ -450,10 +446,10 @@ noweb:
 	${ENV} ${MAKE} BIN=${MNT}/${SYS}/bin/lib LIB=${MNT}/${SYS}/bin/lib \
                 MAN=${MNT}/${SYS}/bin/man \
                 TEXINPUTS=${MNT}/${SYS}/bin/tex all install >${TMP}/trace )
-	@echo 16 The file marks the fact that noweb has been made > noweb
+	@echo The file marks the fact that noweb has been made > noweb
 
 nowebclean:
-	@echo 17 cleaning ${OBJ}/noweb
+	@echo 14 cleaning ${OBJ}/noweb
 	@rm -rf ${OBJ}/noweb
 	@rm -f noweb
 
@@ -465,22 +461,22 @@ We should recompile the world with the .fn information but not here.
 	    do echo $$i ; touch $$i ; done )
 	( for i in `find . -name "*.lisp"` ; \
 	    do echo $$i ; touch $$i ; done )
-	@echo 18 remaking ${SRC}/interp for performance
+	@echo 15a remaking ${SRC}/interp for performance
 	@(cd src ; ${ENV} ${MAKE} )
 \end{verbatim}
 <<src>>=
 srcdir: rootdirs ${SPD}/src/Makefile
-	@echo 19 making ${SPD}/src 
+	@echo 15 making ${SPD}/src 
 	@( cd src ; ${ENV} ${MAKE} )
 
 ${SPD}/src/Makefile: ${SPD}/src/Makefile.pamphlet
-	@echo 20 making ${SPD}/src/Makefile from ${SPD}/src/Makefile.pamphlet
+	@echo 16 making ${SPD}/src/Makefile from ${SPD}/src/Makefile.pamphlet
 	@( cd src ; \
 	   ${DOCUMENT} ${NOISE} Makefile ; \
 	   cp Makefile.dvi ${MNT}/${SYS}/doc/src/src.Makefile.dvi )
 
 libspadclean:
-	@echo 21 cleaning ${OBJ}/${SYS}/lib	
+	@echo 17 cleaning ${OBJ}/${SYS}/lib	
 	@rm -rf ${OBJ}/${SYS}/lib	
 	@( cd src ; ${DOCUMENT} ${NOISE} Makefile )
 	@( cd src ; ${ENV} ${MAKE} clean )
@@ -491,7 +487,7 @@ libspadclean:
 \subsection{src setup}
 <<srcsetup>>=
 srcsetup: rootdirs ${SPD}/src/Makefile
-	@echo 22 making ${SPD}/src 
+	@echo 18 making ${SPD}/src 
 	@( cd src ; ${ENV} ${MAKE} setup )
 
 @
@@ -520,7 +516,7 @@ then the Makefile is rewritten to extract the later version.
 It looks for a chunk name that matches the version number.
 <<LSPMakefile>>=
 ${LSP}/Makefile: ${LSP}/Makefile.pamphlet
-	@echo 23 making ${LSP}/Makefile from ${LSP}/Makefile.pamphlet
+	@echo 20 making ${LSP}/Makefile from ${LSP}/Makefile.pamphlet
 	@( cd lsp ; \
 	 ${DOCUMENT} ${NOISE} Makefile ; \
 	 if [ "${GCLVERSION}" != "gcl-2.4.1" ] ; then \
@@ -545,7 +541,7 @@ more efficient. The [[sys-proclaims]] file contains type information
 about standard common lisp function calls.
 <<lsp>>=
 lspdir: rootdirs ${MNT}/${SYS}/bin/document ${LSP}/Makefile
-	@echo 24 making ${LSP}
+	@echo 19 making ${LSP}
 	@mkdir -p ${OBJ}/${SYS}/bin
 	@mkdir -p ${OBJ}/${SYS}/lsp
 	@(cd lsp ; ${ENV} ${MAKE} gcldir )
@@ -553,7 +549,7 @@ lspdir: rootdirs ${MNT}/${SYS}/bin/document ${LSP}/Makefile
 
 <<LSPMakefile>>
 lspclean:
-	@echo 25 cleaning ${OBJ}/${SYS}/ccl
+	@echo 21 cleaning ${OBJ}/${SYS}/ccl
 	@rm -rf ${LSP}/${GCLVERSION}
 	@rm -rf ${INT}/ccl
 	@rm -rf ${OBJ}/${SYS}/ccl
@@ -561,43 +557,10 @@ lspclean:
 	@rm -f ${LSP}/Makefile ${LSP}/Makefile.dvi
 
 @
-\subsection{aldor}
-Aldor is handled like lisp, that is, it is not part of Axiom but is
-built from a tar-gzipped version that is cached in the zips
-directory. We untar the file into the src directory, cd to that
-location, and let aldor build itself. As new versions are released
-they will be kept in zips on a rolling basis, the current and next
-previous versions. All patches for all versions will also be kept.
-
-The ALDOR\_PROJECT variable points to the source location for the Aldor
-compiler installation. Aldor gets untarred in the top level directory so
-<<ALDOR ENV>>=
-ALDORVERSION070901
-ALDOR_PROJECT=${SPD}/aldor
-ALDOR_INSTALL=${AXIOM}
-GENERIC_DIR=${AXIOM}
-@
-
-Finally we copy the parts we care about into the appropriate locations.
-
-\subsection{aldor}
-<<aldor>>=
-aldordir: 
-	@echo 26 making ${SPD}/aldor version ${ALDORVERSION}
-	@( cd ${SPD} ; \
-           tar -zxf ${ZIPS}/aldor.${ALDORVERSION}.tgz ; \
-	   cd aldor ; \
-	   patch <${ZIPS}/aldor.${ALDORVERSION}.Makefile.globals.patch ; \
-           ${ENV} ${MAKE} aldorcompiler ; \
-           cd aldor ; \
-	   cp ${SPD}/aldor/LICENSE license/license.aldor ; \
-           cp ${SPD}/aldor/pdfs/* ${AXIOM}/doc )
-
-@
 \subsection{install}
 <<install>>=
 install:
-	@echo 27 installing Axiom in ${DESTDIR}
+	@echo 78 installing Axiom in ${DESTDIR}
 	@mkdir -p ${DESTDIR}
 	@cp -pr ${MNT} ${DESTDIR}
 	@echo '#!/bin/sh -' >${COMMAND}
@@ -607,7 +570,7 @@ install:
 	@echo export PATH >>${COMMAND}
 	@cat ${INT}/sman/axiom >>${COMMAND}
 	@chmod +x ${COMMAND}
-	@echo 28 Axiom installation finished.
+	@echo 79 Axiom installation finished.
 	@echo
 	@echo Please add $(shell dirname ${COMMAND}) to your PATH variable
 	@echo Start Axiom with the command $(shell basename ${COMMAND})
@@ -628,7 +591,7 @@ sure the [[INT/DOC/LSP]] and [[INT/DOC/SRC]] directories exist.
 
 <<document>>=
 document: rootdirs
-	@echo 29 documenting files
+	@echo 22 documenting files
 	@mkdir -p ${INT}/doc/lsp
 	@mkdir -p ${INT}/doc/src
 	@(cd lsp ; ${ENV} ${MAKE} document )
@@ -638,8 +601,8 @@ document: rootdirs
 \subsection{clean}
 <<clean>>=
 clean: 
-	@ echo 30 making a ${SYS} system, PART=${PART} SUBPART=${SUBPART}
-	@ echo 31 Environment ${ENV}
+	@ echo 7 making a ${SYS} system, PART=${PART} SUBPART=${SUBPART}
+	@ echo 8 Environment ${ENV}
 	@ rm -f lsp/Makefile.dvi
 	@ rm -f lsp/Makefile
 	@ rm -f noweb 
@@ -841,24 +804,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
-
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 32 Makefile.axposf1v3 called
-	@echo 33 Environment : ${ENV} 
-	@echo 34 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 24 Makefile.axposf1v3 called
+	@echo 25 Environment : ${ENV} 
+	@echo 26 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -892,24 +850,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP}  DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
-
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 35 Makefile.axposf1v4 called
-	@echo 36 Environment : ${ENV} 
-	@echo 37 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 27 Makefile.axposf1v4 called
+	@echo 28 Environment : ${ENV} 
+	@echo 29 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -943,24 +896,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP}  DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 30 Makefile.hp10 called
+	@echo 31 Environment : ${ENV} 
+	@echo 32 finished system build on `date` | tee >lastBuildDate
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 38 Makefile.hp10 called
-	@echo 39 Environment : ${ENV} 
-	@echo 40 finished system build on `date` | tee >lastBuildDate
-
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -994,24 +942,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
-
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 41 Makefile.hp11 called
-	@echo 42 Environment : ${ENV} 
-	@echo 43 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 33 Makefile.hp11 called
+	@echo 34 Environment : ${ENV} 
+	@echo 35 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1045,24 +988,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
-
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 44 Makefile.hp9 called
-	@echo 45 Environment : ${ENV} 
-	@echo 46 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 36 Makefile.hp9 called
+	@echo 37 Environment : ${ENV} 
+	@echo 38 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1096,23 +1034,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 47 Makefile.irixmips1 called
-	@echo 48 Environment : ${ENV} 
-	@echo 49 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 39 Makefile.irixmips1 called
+	@echo 40 Environment : ${ENV} 
+	@echo 41 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1145,23 +1079,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 50 Makefile.irixmips3 called
-	@echo 51 Environment : ${ENV} 
-	@echo 52 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 42 Makefile.irixmips3 called
+	@echo 43 Environment : ${ENV} 
+	@echo 44 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1201,23 +1131,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} TANGLE=${TANGLE} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH} TANGLE=${TANGLE}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 53 Makefile.FreeBSD called
-	@echo 54 Environment : ${ENV} 
-	@echo 55 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.FreeBSD called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1258,23 +1184,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 SRCDIRS=bootdir interpdir sharedir algebradir etcdir docdir inputdir
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 56 Makefile.windows called
-	@echo 57 Environment : ${ENV} 
-	@echo 58 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.windows called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1323,23 +1245,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 59 Makefile.linux called
-	@echo 60 Environment : ${ENV} 
-	@echo 61 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1402,23 +1320,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 62 Makefile.fedora5 called
-	@echo 63 Environment : ${ENV} 
-	@echo 64 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1481,23 +1395,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 65 Makefile.fedora6 called
-	@echo 66 Environment : ${ENV} 
-	@echo 67 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1560,23 +1470,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 68 Makefile.fedora7 called
-	@echo 69 Environment : ${ENV} 
-	@echo 70 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1639,23 +1545,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 71 Makefile.fedora8 called
-	@echo 72 Environment : ${ENV} 
-	@echo 73 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1699,23 +1601,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 74 Makefile.gentoo called
-	@echo 75 Environment : ${ENV} 
-	@echo 76 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1754,23 +1652,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 77 Makefile.fedora64 called
-	@echo 78 Environment : ${ENV} 
-	@echo 79 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1805,23 +1699,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 80 Makefile.fedora3 called
-	@echo 81 Environment : ${ENV} 
-	@echo 82 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1856,23 +1746,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 83 Makefile.linuxglibc called
-	@echo 84 Environment : ${ENV} 
-	@echo 85 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 48 Makefile.linuxglibc called
+	@echo 49 Environment : ${ENV} 
+	@echo 50 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1906,23 +1792,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 86 Makefile.linuxglibc2.1 called
-	@echo 87 Environment : ${ENV} 
-	@echo 88 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 51 Makefile.linuxglibc2.1 called
+	@echo 52 Environment : ${ENV} 
+	@echo 53 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -1961,23 +1843,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-LOCBFD>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=gpatch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 89 Makefile.solaris9 called
-	@echo 90 Environment : ${ENV} 
-	@echo 91 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2011,23 +1889,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 92 Makefile.rs6000aix3 called
-	@echo 93 Environment : ${ENV} 
-	@echo 94 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 54 Makefile.rs6000aix3 called
+	@echo 55 Environment : ${ENV} 
+	@echo 56 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2061,23 +1935,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 95 Makefile.rs6000aix4 called
-	@echo 96 Environment : ${ENV} 
-	@echo 97 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 57 Makefile.rs6000aix4 called
+	@echo 58 Environment : ${ENV} 
+	@echo 59 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2111,23 +1981,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 98 Makefile.rs6000aix4.1 called
-	@echo 99 Environment : ${ENV} 
-	@echo 100 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 60 Makefile.rs6000aix4.1 called
+	@echo 61 Environment : ${ENV} 
+	@echo 62 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2161,23 +2027,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 101 Makefile.rs6000aix4.3 called
-	@echo 102 Environment : ${ENV} 
-	@echo 103 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 63 Makefile.rs6000aix4.3 called
+	@echo 64 Environment : ${ENV} 
+	@echo 65 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2212,23 +2074,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 104 Makefile.sun4os55c called
-	@echo 105 Environment : ${ENV} 
-	@echo 106 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 66 Makefile.sun4os55c called
+	@echo 67 Environment : ${ENV} 
+	@echo 68 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2262,23 +2120,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 107 Makefile.sun4os55g called
-	@echo 108 Environment : ${ENV} 
-	@echo 109 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 69 Makefile.sun4os55g called
+	@echo 70 Environment : ${ENV} 
+	@echo 71 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2313,23 +2167,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 110 Makefile.sun4os58c called
-	@echo 111 Environment : ${ENV} 
-	@echo 112 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 72 Makefile.sun4os58c called
+	@echo 73 Environment : ${ENV} 
+	@echo 74 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2363,23 +2213,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir
-	@echo 113 Makefile.sung called
-	@echo 114 Environment : ${ENV} 
-	@echo 115 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 75 Makefile.sung called
+	@echo 76 Environment : ${ENV} 
+	@echo 77 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
@@ -2430,23 +2276,19 @@ DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
 <<GCLOPTS-CUSTRELOC>>
-<<ALDOR ENV>>
 <<SRCDIRS>>
 PATCH=patch
 
 ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
     TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
     LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
-    SRCDIRS=${SRCDIRS} PATCH=${PATCH} \
-    ALDOR_PROJECT=${ALDOR_PROJECT} ALDORVERSION=${ALDORVERSION} \
-    ALDOR_INSTALL=${ALDOR_INSTALL} GENERIC_DIR=${GENERIC_DIR}
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
 
-all: rootdirs noweb srcsetup lspdir aldordir srcdir 
-	@echo 116 Makefile.MACOSX called
-	@echo 117 Environment : ${ENV} 
-	@echo 118 finished system build on `date` | tee >lastBuildDate
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.linux called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
 
-<<aldor>>
 <<rootdirs>>
 <<noweb>>
 <<literate commands>>
diff --git a/changelog b/changelog
index 4e3d1bd..49e15d1 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071216 tpd Makefile fix mistake of using wrong Makefile for Xpm fix (7045)
 20071216 cys Makefile add -lXpm to loader flags (7045)
 20071215 gxv src/graph/viewman/makegraph.c discardGraph free corrected (7023)
 20071215 tpd src/hyper/Makefile fix typo in bookvol11 building stanza

\start
Date: 16 Dec 2007 12:28:59 +0100
From: Martin Rubey
To: list
Subject: Re: Re: regression tests

Dear Bill, Tim,

Bill Page writes:

> Have you looked at the regression testing facility that Tim Daly has
> built for the original Axiom project? Do you think that it is not
> adequate and that we should re-do it another way rather than simply
> port his work?

Thanks for the reminder, I'll look into it.  Tim, could you point me to the
right files?  Most important: where do you put the tests?

\start
Date: Sun, 16 Dec 2007 08:43:33 -0800
From: Arthur Ralfs
To: list
Subject: mathml derivative patch


Tim, Waldek,

This patch fixes the problem with derivatives Tim found, e.g.
F:=operator F
x:=operator x
y:=operator y
a:=F(x z,y z,z**2)+x y(z+1)
D(a,z)

However I've had to abandon differential notation for now, although I'd like
to find some way to use it when appropriate, or perhaps give the user the option
of trying it.

Arthur


----b620720a9fa61d4929e
 filename=mathml.spad.pamphlet.derivative.patch

LS0tIG1hdGhtbC5zcGFkLnBhbXBobGV0CTIwMDctMTItMTEgMDc6MDA6NDUuMDAwMDAwMDAw
IC0wODAwCisrKyBtYXRobWwuc3BhZC5wYW1waGxldC5uZXcJMjAwNy0xMi0xNiAwODoxNjoy
OC4wMDAwMDAwMDAgLTA4MDAKQEAgLTI1LDE0ICsyNSwxNCBAQAogQXQgdGhpcyB0aW1lICgy
MDA3LTAyLTExKSB0aGUgcGFja2FnZSBvbmx5IGhhcyBhIHByZXNlbnRhdGlvbgogcGFja2Fn
ZS4gIEEgY29udGVudCBwYWNrYWdlIGlzIGluIHRoZQogd29ya3MgaG93ZXZlciBpdCBpcyBt
b3JlIGRpZmZpY3VsdC4gIFVuZm9ydHVuYXRlbHkgQXhpb20gZG9lcwotbm90IG1ha2UgaXRz
IHNlbWFudGljcyBlYXNsaXkgYXZhaWxhYmxlLiAgVGhlIFxzcGFkdHlwZXtPdXRwdXRGb3Jt
fQorbm90IG1ha2UgaXRzIHNlbWFudGljcyBlYXNpbHkgYXZhaWxhYmxlLiAgVGhlIFxzcGFk
dHlwZXtPdXRwdXRGb3JtfQogZG9tYWluIG1lZGlhdGVzIGJldHdlZW4gdGhlIGluZGl2aWR1
YWwgQXhpb20gZG9tYWlucyBhbmQgdGhlCiB1c2VyIHZpc2libGUgb3V0cHV0IGJ1dCBcc3Bh
ZHR5cGV7T3V0cHV0Rm9ybX0gZG9lcyBub3QgcHJvdmlkZSBmdWxsCiBzZW1hbnRpYyBpbmZv
cm1hdGlvbi4gIEZyb20gbXkgY3VycmVudGx5IGluY29tcGxldGUgdW5kZXJzdGFuZGluZwog
b2YgQXhpb20gaXQgYXBwZWFycyB0aGF0IHJlbWVkeWluZyB0aGlzIHdvdWxkIGVudGFpbCBn
b2luZyBiYWNrCiB0byB0aGUgaW5kaXZpZHVhbCBkb21haW5zIGFuZCByZXdyaXRpbmcgYSBs
b3Qgb2YgY29kZS4KIEhvd2V2ZXIgc29tZSBzZW1hbnRpY3MgYXJlIGNvbnZleWVkIGRpcmVj
dGx5IGJ5IFxzcGFkdHlwZXtPdXRwdXRGb3JtfSBhbmQgb3RoZXIKLXRoaW5ncyBjYW4gYmUg
ZGVkdWNlZCBmcm9tIFxzcGFkdHlwZXtPdXRwdXRGb3JtfSBvciBmb3JtIHRoZSBvcmlnaW5h
bAordGhpbmdzIGNhbiBiZSBkZWR1Y2VkIGZyb20gXHNwYWR0eXBle091dHB1dEZvcm19IG9y
IGZyb20gdGhlIG9yaWdpbmFsCiB1c2VyIGNvbW1hbmQuCiAKIFxzZWN0aW9ue0Rpc3BsYXlp
bmcgTWF0aE1MfQpAQCAtMTA3LDcgKzEwNyw3IEBACiBJIGRvbid0IGtub3cgb2YgYW55IEF4
aW9tIGNvbW1hbmQgdGhhdCBwcm9kdWNlcyBzdWNoIGFuIG9iamVjdC4gSW4KIGZhY3QgYXQg
cHJlc2VudCBJIHNlZSB0aGUgY2FzZSBvZiAiU1VQRVJTVUIiIGJlaW5nIHVzZWQgZm9yIHB1
dHRpbmcKIHByaW1lcyBpbiB0aGUgc3VwZXJzY3JpcHQgcG9zaXRpb24gdG8gZGVub3RlIG9y
ZGluYXJ5IGRpZmZlcmVudGlhdGlvbi4KLUkgYWxzbyBvbmx5IHNlZSB0aGUgIlNVQiIgY2Fz
ZSBiZWluZyBvbmx5IHVzZWQgdG8gZGVub3RlIHBhcnRpYWwKK0kgYWxzbyBvbmx5IHNlZSB0
aGUgIlNVQiIgY2FzZSBiZWluZyB1c2VkIHRvIGRlbm90ZSBwYXJ0aWFsCiBkZXJpdmF0aXZl
cy4KIAogXHNlY3Rpb257KXNldCBvdXRwdXQgbWF0aG1sIG9ufQpAQCAtMTE2LDcgKzExNiw3
IEBACiBNYWtpbmcgbWF0aG1sIGFwcGVhciBhcyBvdXRwdXQgZHVyaW5nIGEgbm9ybWFsIEF4
aW9tIHNlc3Npb24KIGJ5IGludm9raW5nICIpc2V0IG91dHB1dCBtYXRobWwgb24iIHByb3Zl
ZCB0byBiZSBhIGJpdCB0ZWRpb3VzCiBhbmQgc2VlbXMgdG8gYmUgdW5kb2N1bWVudGVkLiAg
SSBkb2N1bWVudCBteSBleHBlcmllbmNlIGhlcmUKLWluIGNhc2UgaW4gcHJvdmVzIHVzZWZ1
bCB0byBzb21lYm9keSBlbHNlIHRyeWluZyB0byBnZXQgYSBuZXcKK2luIGNhc2UgaXQgcHJv
dmVzIHVzZWZ1bCB0byBzb21lYm9keSBlbHNlIHRyeWluZyB0byBnZXQgYSBuZXcKIG91dHB1
dCBmb3JtYXQgZnJvbSBBeGlvbS4KIAogSW4gXHNwYWR0eXBle01hdGhNTEZvcm1hdH0gdGhl
IGZ1bmN0aW9ucyAKQEAgLTIzMSw3ICsyMzEsNyBAQAogCiBJIGRvbid0IHNlZSB0aGF0IHRo
aXMgZmlsZSBpcyB1c2VkIGFueXdoZXJlIGJ1dCBJIG1hZGUKIHRoZSBhcHByb3ByaWF0ZSBj
aGFuZ2VzIGFueXdheSBieSBzZWFyY2hpbmcgZm9yICJURVgiIGFuZAotbWltaWNpbmcgZXZl
cnRoaW5nIGZvciBNTUxGT1JNLgorbWltaWNpbmcgZXZlcnl0aGluZyBmb3IgTU1MRk9STS4K
IAogXHN1YnNlY3Rpb257RmlsZSBzcmMvZG9jL2F4aW9tLmJpYi5wYW1waGxldH0KIApAQCAt
Mjg1LDE0ICsyODUsMTQgQEAKIFRoZSBwdWJsaWNseSBleHBvc2VkIGZ1bmN0aW9ucyBhcmU6
CiAKICAgICBcc3BhZGZ1bntjb2VyY2U6IEUgLSQ+JCBTfSAgVGhpcyBmdW5jdGlvbiBpcyB0
aGUgbWFpbiBvbmUgZm9yIGNvbnZlcnRpbmcKLWFuZCBleHByZXNzaW9uIGluIGRvbWFpbiBP
dXRwdXRGb3JtIGludG8gYSBNYXRoTUwgc3RyaW5nLgorYW4gZXhwcmVzc2lvbiBpbiBkb21h
aW4gT3V0cHV0Rm9ybSBpbnRvIGEgTWF0aE1MIHN0cmluZy4KIAogICAgIFxzcGFkZnVue2Nv
ZXJjZVM6IEUgLSQ+JCBTfSAgVGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGZyb20gdGhlIGNv
bW1hbmQgbGluZS4KIEl0IGNvbnZlcnRzIGFuIE91dHB1dEZvcm0gZXhwcmVzc2lvbiBpbnRv
IGEgTWF0aE1MIHN0cmluZyBhbmQgZG9lcwogc29tZSBmb3JtYXR0aW5nIHNvIHRoYXQgdGhl
IG91dHB1dCBpcyBub3Qgb25lIGxvbmcgbGluZS4gIElmIHlvdSB0YWtlCiB0aGUgb3V0cHV0
IGZyb20gdGhpcyBmdW5jdGlvbiwgc3RpY2sgaXQgaW4gYW4gZW1hY3MgYnVmZmVyIGluCiBu
eG1sLW1vZGUgYW5kIHRoZW4gaW5kZW50IGFjY29yZGluZyB0byBtb2RlLCB5b3UnbGwgZ2V0
IHNvbWV0aGluZyB0aGF0J3MKLW5pY2VyIHRvIGxvb2sgYXQgdGhhbiBjb21lcyBmcm9tIGNv
ZXJjZS4gTm90ZSB0aGF0IGNvZXJjZVMgcmV0dXJucworbmljZXIgdG8gbG9vayBhdCB0aGFu
IHdoYXQgY29tZXMgZnJvbSBjb2VyY2UuIE5vdGUgdGhhdCBjb2VyY2VTIHJldHVybnMKIHRo
ZSBzYW1lIHZhbHVlIGFzIGNvZXJjZSBidXQgaW52b2tlcyBhIGRpc3BsYXkgZnVuY3Rpb24g
YXMgd2VsbCBzbyB0aGF0CiB0aGUgcmVzdWx0IHdpbGwgYmUgcHJpbnRlZCB0d2ljZSBpbiBk
aWZmZXJlbnQgZm9ybWF0cy4gIFRoZSBuZWVkIGZvciB0aGlzCiBpcyB0aGF0IHRoZSBvdXRw
dXQgZnJvbSBjb2VyY2UgaXMgYXV0b21hdGljYWxseSBmb3JtYXR0ZWQgd2l0aCBsaW5lIGJy
ZWFrcwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgaW1wb3J0IExpc3QgT3V0cHV0Rm9ybQog
ICAgIGltcG9ydCBMaXN0IFN0cmluZwogCi0gICAgLS0gbG9jYWwgdmFyaWFibGVzIGRlY2xh
cmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMKKyAgICAtLSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJh
dGlvbnMgYW5kIGRlZmluaXRpb25zCiAKICAgICBleHByOiBFCiAgICAgcHJlYyxvcFByZWM6
IEkKQEAgLTg4NCw2ICs4ODQsOCBAQAogCiAgICAgZm9ybWF0U3ViKGV4cHIgOiBFLCBhcmdz
IDogTCBFLCBvcFByZWMgOiBJKSA6IFMgPT0KICAgICAgIC0tIFRoaXMgb25lIHByb2R1Y2Vz
IGRpZmZlcmVudGlhbCBub3RhdGlvbiBwYXJ0aWFsIGRlcml2YXRpdmVzLgorICAgICAgLS0g
SXQgZG9lc24ndCB3b3JrIGluIGFsbCBjYXNlcyBhbmQgbWF5IG5vdCBiZSB3b3JrYWJsZSwg
dXNlCisgICAgICAtLSBmb3JtYXRTdWIxIGJlbG93IGZvciBub3cuCiAgICAgICAtLSBBdCB0
aGlzIHRpbWUgdGhpcyBpcyBvbmx5IHRvIGhhbmRsZSBwYXJ0aWFsIGRlcml2YXRpdmVzLgog
ICAgICAgLS0gSWYgdGhlIFNVQiBjYXNlIGhhbmRsZXMgYW55dGhpbmcgZWxzZSBJJ20gbm90
IGF3YXJlIG9mIGl0LgogICAgICAgLS0gVGhpcyBhbiBleGFtcGxlIG9mIHRoZSA0dGggcGFy
dGlhbCBvZiB5KHgseikgdy5yLnQuIHgseCx6LHgKQEAgLTEwMDIsMjYgKzEwMDQsMzIgQEAK
ICAgICAgIHMgOj0gcyI8L21yb3c+PC9tc3ViPjxtbz4oPC9tbz4iCiAgICAgICBpIDo9IDEK
ICAgICAgIHdoaWxlIGkgPCAjcG9zTFMrMSByZXBlYXQKLSAgICAgICAgdG1wUyA6PSBzdHJp
bmdpZnkgYXJncy5pCistLSAgICAgICAgdG1wUyA6PSBzdHJpbmdpZnkgYXJncy5pCisJdG1w
UyA6PSBmb3JtYXRNbWwoZmlyc3QgYXJncyxtaW5QcmVjKQorCWFyZ3MgOj0gcmVzdCBhcmdz
CiAJcyA6PSBzIjxtaT4idG1wUyI8L21pPiIKIAlpZiBpIDwgI3Bvc0xTIHRoZW4gcyA6PSBz
Ijxtbz4sPC9tbz4iCiAJaSA6PSBpKzEKICAgICAgIHMgOj0gcyI8bW8+KTwvbW8+IgogCi0g
ICAgZm9ybWF0U3VwZXJTdWIxKGV4cHIgOiBFLCBhcmdzIDogTCBFLCBvcFByZWMgOiBJKSA6
IFMgPT0KLSAgICAgIC0tIHRoaXMgcHJvZHVjZXMgZGlmZmVyZW50aWFsIG5vdGF0aW9uIG9y
ZGluYXJ5IGRlcml2YXRpdmVzLgorICAgIGZvcm1hdFN1cGVyU3ViKGV4cHIgOiBFLCBhcmdz
IDogTCBFLCBvcFByZWMgOiBJKSA6IFMgPT0KKyAgICAgIC0tIHRoaXMgcHJvZHVjZXMgcHJp
bWUgbm90YXRpb24gb3JkaW5hcnkgZGVyaXZhdGl2ZXMuCiAgICAgICAtLSBmaXJzdCBoYXZl
IHRvIGRpdmluZSB0aGUgc2VtYW50aWNzLCBhZGQgY2FzZXMgYXMgbmVlZGVkCisgICAgICBX
cml0ZUxpbmUkTGlzcCAiU3VwZXJTdWIxIGJlZ2luIgogICAgICAgYXRvbUUgOiBMIEUgOj0g
YXRvbWl6ZShleHByKSAgICAgIAogICAgICAgb3AgOiBTIDo9IHN0cmluZ2lmeSBmaXJzdCBh
dG9tRQotICAgICAgb3AgXj0gIlNVUEVSU1VCIiA9PiAiPG10ZXh0Pk1pc3Rha2UgaW4gZm9y
bWF0U3VwZXJTdWI6IG5vIFNVUEVSU1VCPC9tdGV4dD4iCi0gICAgICAjYXJncyBePSAxID0+
ICI8bXRleHQ+TWlzdGFrZSBpbiBTdXBlclN1YjogI2FyZ3MgPD4gMTwvbXRleHQ+IgorICAg
ICAgV3JpdGVMaW5lJExpc3AgIm9wOiAib3AKKyAgICAgIG9wIF49ICJTVVBFUlNVQiIgPT4g
IjxtdGV4dD5NaXN0YWtlIGluIGZvcm1hdFN1cGVyU3ViOiBubyBTVVBFUlNVQjE8L210ZXh0
PiIKKyAgICAgICNhcmdzIF49IDEgPT4gIjxtdGV4dD5NaXN0YWtlIGluIFN1cGVyU3ViMTog
I2FyZ3MgPD4gMTwvbXRleHQ+IgogICAgICAgdmFyIDogRSA6PSBmaXJzdCBhcmdzCiAgICAg
ICAtLSBzaG91bGQgYmUgbG9va2luZyBhdCBzb21ldGhpbmcgbGlrZSB7e1NVUEVSU1VCfXt2
YXJ9eyB9eywsLi4uLH19IGZvcgogICAgICAgLS0gZXhhbXBsZSBoZXJlJ3MgdGhlIHNlY29u
ZCBkZXJpdmF0aXZlIG9mIHkgdy5yLnQuIHgKICAgICAgIC0tIHt7e1NVUEVSU1VCfXt5fXsg
fXssLH19e3h9fSwgZXhwciBpcyB0aGUgZmlyc3Qge30gYW5kIGFyZ3MgaXMgdGhlCiAgICAg
ICAtLSB7eH0KICAgICAgIGZ1bmNTIDogUyA6PSBzdHJpbmdpZnkgZmlyc3QgcmVzdCBhdG9t
RQorICAgICAgV3JpdGVMaW5lJExpc3AgImZ1bmNTOiAiZnVuY1MKICAgICAgIGJ2YXJTIDog
UyA6PSBzdHJpbmdpZnkgZmlyc3QgYXJncworICAgICAgV3JpdGVMaW5lJExpc3AgImJ2YXJT
OiAiYnZhclMKICAgICAgIC0tIGNvdW50IHRoZSBudW1iZXIgb2YgY29tbWFzCiAgICAgICBj
b21tYVMgOiBTIDo9IHN0cmluZ2lmeSBmaXJzdCByZXN0IHJlc3QgcmVzdCBhdG9tRQogICAg
ICAgY29tbWFUZXN0IDogUyA6PSAiLCIKQEAgLTEwMzAsMTUgKzEwMzgsMTggQEAKICAgICAg
ICAgaSA6PSBpKzEKIAljb21tYVRlc3QgOj0gY29tbWFUZXN0IiwiCiAgICAgICBzIDogUyA6
PSAiPG1zdXA+PG1pPiJmdW5jUyI8L21pPjxtcm93PiIKKyAgICAgIFdyaXRlTGluZSRMaXNw
ICJzOiAicwogICAgICAgaiA6IEkgOj0gMAogICAgICAgd2hpbGUgaiA8IGkgcmVwZWF0CiAg
ICAgICAgIHMgOj0gcyI8bW8+JiN4MDIwMzI7PC9tbz4iCiAJaiA6PSBqICsgMQotICAgICAg
cyA6PSBzIjwvbXJvdz48L21zdXA+PG1vPiYjeDAyMDYxOzwvbW8+PG1vPig8L21vPjxtaT4i
YnZhclMiPC9taT48bW8+KTwvbW8+IgorICAgICAgcyA6PSBzIjwvbXJvdz48L21zdXA+PG1v
PiYjeDAyMDYxOzwvbW8+PG1vPig8L21vPiJmb3JtYXRNbWwoZmlyc3QgYXJncyxtaW5QcmVj
KSI8bW8+KTwvbW8+IgogCi0gICAgZm9ybWF0U3VwZXJTdWIoZXhwciA6IEUsIGFyZ3MgOiBM
IEUsIG9wUHJlYyA6IEkpIDogUyA9PQotICAgICAgLS0gVGhpcyBvbmUgcHJvZHVjZXMgb3Jk
aW5hcnkgZGVyaXZhdGl2ZXMgd2l0aCBwcmltZSBub3RhdGlvbi4KKyAgICBmb3JtYXRTdXBl
clN1YjEoZXhwciA6IEUsIGFyZ3MgOiBMIEUsIG9wUHJlYyA6IEkpIDogUyA9PQorICAgICAg
LS0gVGhpcyBvbmUgcHJvZHVjZXMgb3JkaW5hcnkgZGVyaXZhdGl2ZXMgd2l0aCBkaWZmZXJl
bnRpYWwgbm90YXRpb24sCisgICAgICAtLSBpdCBuZWVkcyBhIGxpdHRsZSBtb3JlIHdvcmsg
eWV0LgogICAgICAgLS0gZmlyc3QgaGF2ZSB0byBkaXZpbmUgdGhlIHNlbWFudGljcywgYWRk
IGNhc2VzIGFzIG5lZWRlZAorICAgICAgV3JpdGVMaW5lJExpc3AgIlN1cGVyU3ViIGJlZ2lu
IgogICAgICAgYXRvbUUgOiBMIEUgOj0gYXRvbWl6ZShleHByKSAgICAgIAogICAgICAgb3Ag
OiBTIDo9IHN0cmluZ2lmeSBmaXJzdCBhdG9tRQogICAgICAgb3AgXj0gIlNVUEVSU1VCIiA9
PiAiPG10ZXh0Pk1pc3Rha2UgaW4gZm9ybWF0U3VwZXJTdWI6IG5vIFNVUEVSU1VCPC9tdGV4
dD4iCkBAIC0xMDU3LDcgKzEwNjgsNyBAQAogICAgICAgd2hpbGUgcG9zaXRpb24oY29tbWFU
ZXN0LGNvbW1hUywxKSA+IDAgcmVwZWF0CiAgICAgICAgIG5kaWZmcyA6PSBuZGlmZnMrMQog
CWNvbW1hVGVzdCA6PSBjb21tYVRlc3QiLCIKLSAgICAgIHMgOiBTIDo9ICI8bWZyYWM+PG1y
b3c+PG1zdXA+PG1vPiYjeDAyMTQ2OzwvbW8+PG1uPiJzdHJpbmcobmRpZmZzKSI8L21uPjwv
bXN1cD48bWk+ImZ1bmNTIjwvbWk+PC9tcm93Pjxtcm93Pjxtbz4mI3gwMjE0Njs8L21vPjxt
c3VwPjxtaT4iYnZhclMiPC9taT48bW4+InN0cmluZyhuZGlmZnMpIjwvbW4+PC9tc3VwPjwv
bXJvdz48L21mcmFjPjxtbz4mI3gwMjA2MTs8L21vPjxtbz4oPC9tbz48bWk+ImJ2YXJTIjwv
bWk+PG1vPik8L21vPiIKKyAgICAgIHMgOiBTIDo9ICI8bWZyYWM+PG1yb3c+PG1zdXA+PG1v
PiYjeDAyMTQ2OzwvbW8+PG1uPiJzdHJpbmcobmRpZmZzKSI8L21uPjwvbXN1cD48bWk+ImZ1
bmNTIjwvbWk+PC9tcm93Pjxtcm93Pjxtbz4mI3gwMjE0Njs8L21vPjxtc3VwPjxtaT4iZm9y
bWF0TW1sKGZpcnN0IGFyZ3MsbWluUHJlYykiPC9taT48bW4+InN0cmluZyhuZGlmZnMpIjwv
bW4+PC9tc3VwPjwvbXJvdz48L21mcmFjPjxtbz4mI3gwMjA2MTs8L21vPjxtbz4oPC9tbz48
bWk+ImZvcm1hdE1tbChmaXJzdCBhcmdzLG1pblByZWMpIjwvbWk+PG1vPik8L21vPiIKIAog
ICAgIGZvcm1hdFBsZXgob3AgOiBTLCBhcmdzIDogTCBFLCBwcmVjIDogSSkgOiBTID09CiAg
ICAgICBob2xkIDogUwpAQCAtMTE5MSwxNSArMTIwMiwzMSBAQAogICAgICAgbnVsbCBhcmdz
ID0+ICIiCiAgICAgICBwIDogSSA6PSBwb3NpdGlvbihvcCxuYXJ5T3BzKQogICAgICAgcCA8
IDEgPT4gZXJyb3IgInVua25vd24gbmFyeSBvcCIKLSAgICAgIC0tIG5lZWQgdG8gdGVzdCBm
b3IgIlpBRyIgY2FzZSBhbmQgZGl2ZXJ0IGl0IGhlcmUsIGhlcmUncyBhbgotICAgICAgLS0g
ZXhhbXBsZSBpbmNsdWRpbmcgIm9wIiwgdGhlIGFyZ3MgbGlzdCB3b3VsZCBiZSB0aGUgcmVz
dCBvZiB0aGlzCisgICAgICAtLSBuZWVkIHRvIHRlc3QgZm9yICJaQUciIGNhc2UgYW5kIGRp
dmVydCBpdCBoZXJlCisgICAgICAtLSBleCAxLiBjb250aW51ZWRGcmFjdGlvbigzMTQxNTkv
MTAwMDAwKQogICAgICAgLS0ge3srfXszfXt7WkFHfXsxfXs3fX17e1pBR317MX17MTV9fXt7
WkFHfXsxfXsxfX17e1pBR317MX17MjV9fQogICAgICAgLS0ge3taQUd9ezF9ezF9fXt7WkFH
fXsxfXs3fX17e1pBR317MX17NH19fQotICAgICAgLS0gVGhlIGZpcnN0IGFyZywgdGhlICIz
IiBpbiB0aGlzIGNhc2UsIGNvdWxkIGJlIGEgIlpBRyIgb3Igc29tZXRoaW5nCisgICAgICAt
LSB0aGlzIGlzIHRoZSBwcmVjb25kaXRpb25lZCBvdXRwdXQgZm9ybQorICAgICAgLS0gaW5j
bHVkaW5nICJvcCIsIHRoZSBhcmdzIGxpc3Qgd291bGQgYmUgdGhlIHJlc3Qgb2YgdGhpcwor
ICAgICAgLS0gaS5lIG9wID0gJysnIGFuZCBhcmdzID0ge3szfXt7WkFHfXsxfXs3fX17e1pB
R317MX17MTV9fQorICAgICAgLS0ge3taQUd9ezF9ezF9fXt7WkFHfXsxfXsyNX19e3taQUd9
ezF9ezF9fXt7WkFHfXsxfXs3fX17e1pBR317MX17NH19fQorICAgICAgLS0gZXggMi4gY29u
dGludWVkRnJhY3Rpb24oMTQxNTkvMTAwMDAwKQorICAgICAgLS0gdGhpcyBvbmUgZG9lc24n
dCBoYXZlIHRoZSBsZWFkaW5nIGludGVnZXIKKyAgICAgIC0tIHt7K317e1pBR317MX17N319
e3taQUd9ezF9ezE1fX17e1pBR317MX17MX19e3taQUd9ezF9ezI1fX0KKyAgICAgIC0tIHt7
WkFHfXsxfXsxfX17e1pBR317MX17N319e3taQUd9ezF9ezR9fX0KKyAgICAgIC0tCisgICAg
ICAtLSBleCAzLiBjb250aW51ZWRGcmFjdGlvbigzLHJlcGVhdGluZyBbMV0sIHJlcGVhdGlu
ZyBbMyw2XSkKKyAgICAgIC0tIHt7K317M317e1pBR317MX17M319e3taQUd9ezF9ezZ9fXt7
WkFHfXsxfXszfX17e1pBR317MX17Nn19CisgICAgICAtLSB7e1pBR317MX17M319e3taQUd9
ezF9ezZ9fXt7WkFHfXsxfXszfX17e1pBR317MX17Nn19CisgICAgICAtLSB7e1pBR317MX17
M319e3taQUd9ezF9ezZ9fXsuLi59fQorICAgICAgLS0gSW4gZWFjaCBvZiB0aGVzZSBleGFt
cGxlcyB0aGUgYXJncyBsaXN0IGNvbnNpc3RzIG9mIHRoZSB0ZXJtcworICAgICAgLS0gZm9s
bG93aW5nIHRoZSAnKycgb3AKKyAgICAgIC0tIHNvIHRoZSBmaXJzdCBhcmcgY291bGQgYmUg
YSAiWkFHIiBvciBzb21ldGhpbmcKICAgICAgIC0tIGVsc2UsIGJ1dCB0aGUgc2Vjb25kIGFy
ZyBsb29rcyBsaWtlIGl0IGhhcyB0byBiZSAiWkFHIiwgc28gbWF5YmUKLSAgICAgIC0tIHRl
c3QgZm9yICNhcmdzID4gMSBhbmQgYXJncy4yIGlzICJaQUciLgotICAgICAgLS0gVGhpcyB0
ZXN0IHNob3VsZCB3b3JrIHNvIGxvbmcgYXMgYXhpb20gZG9lc24ndCB0cnkgdG8gZXZhbHVh
dGUKLSAgICAgIC0tIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgImFuZCIgd2hlbiB0aGUgZmly
c3QgaGFsZiBpcyBmYWxzZS4KKyAgICAgIC0tIHRlc3QgZm9yICNhcmdzID4gMSBhbmQgYXJn
cy4yIGNvbnRhaW5zICJaQUciLgorICAgICAgLS0gTm90ZSB0aGF0IHNpbmNlIHRoZSByZXN1
bHRpbmcgTWF0aE1MIDxtZnJhYz5zIGFyZSBuZXN0ZWQgd2UgbmVlZAorICAgICAgLS0gdG8g
aGFuZGxlIHRoZSB3aG9sZSBjb250aW51ZWQgZnJhY3Rpb24gYXQgb25jZSwgaS5lLiB3ZSBj
YW4ndAorICAgICAgLS0ganVzdCBsb29rIGZvciwgZS5nLiwge3taQUd9ezF9ezZ9fQogICAg
ICAgKCNhcmdzID4gMSkgYW5kIChwb3NpdGlvbigiWkFHIixzdHJpbmdpZnkgZmlyc3QgcmVz
dCBhcmdzLDEpID4gMCkgPT4KIAkgICB0bXBTIDogUyA6PSBzdHJpbmdpZnkgZmlyc3QgYXJn
cwogCSAgIHBvc2l0aW9uKCJaQUciLHRtcFMsMSkgPiAwID0+IGZvcm1hdFphZyhhcmdzKQpA
QCAtMTIyNCwxMSArMTI1MSwxNyBAQAogICAgICAgcwogCiAgICAgZm9ybWF0WmFnKGFyZ3Mg
OiBMIEUpIDogUyA9PQotICAgIC0tIHt7WkFHfXsxfXs3fX0KKyAgICAtLSBhcmdzIHdpbGwg
YmUgYSBsaXN0IG9mIHRoaW5ncyBsaWtlIHRoaXMge3taQUd9ezF9ezd9fSwgdGhlIFpBRwor
ICAgIC0tIG11c3QgYmUgdGhlcmUsIHRoZSAnMScgYW5kICc3JyBjb3VsZCBjb25jZWl2YWJs
eSBiZSBtb3JlIGNvbXBsZXgKKyAgICAtLSBleHByZXNzaW9ucwogICAgICAgdG1wWmFnIDog
TCBFIDo9IGZpcnN0IGFyZ3MgcHJldGVuZCBMIEUKKyAgICAgIC0tIG1heSB3YW50IHRvIHRl
c3QgdGhhdCB0bXBaYWcgY29udGFpbnMgJ1pBRycKICAgICAgICNhcmdzID4gMSA9PiAiPG1m
cmFjPiJmb3JtYXRNbWwoZmlyc3QgcmVzdCB0bXBaYWcsbWluUHJlYykiPG1yb3c+PG1uPiJm
b3JtYXRNbWwoZmlyc3QgcmVzdCByZXN0IHRtcFphZyxtaW5QcmVjKSI8L21uPjxtbz4rPC9t
bz4iZm9ybWF0WmFnKHJlc3QgYXJncykiPC9tcm93PjwvbWZyYWM+IgotICAgICAgIjxtZnJh
Yz4iZm9ybWF0TW1sKGZpcnN0IHJlc3QgdG1wWmFnLG1pblByZWMpZm9ybWF0TW1sKGZpcnN0
IHJlc3QgcmVzdCB0bXBaYWcsbWluUHJlYykiPC9tZnJhYz4iCi0gICAgICAKKyAgICAgIChm
aXJzdCBhcmdzID0gIi4uLiI6OkUpQEJvb2xlYW4gPT4gIjxtbz4mI3gyMDI2OzwvbW8+Igor
ICAgICAgcG9zaXRpb24oIlpBRyIsc3RyaW5naWZ5IGZpcnN0IGFyZ3MsMSkgPiAwID0+Cisg
ICAgICAgICAgIjxtZnJhYz4iZm9ybWF0TW1sKGZpcnN0IHJlc3QgdG1wWmFnLG1pblByZWMp
Zm9ybWF0TW1sKGZpcnN0IHJlc3QgcmVzdCB0bXBaYWcsbWluUHJlYykiPC9tZnJhYz4iICAg
ICAgCisgICAgICAiPG10ZXh0PmZvcm1hdFphZzogVW5leHBlY3RlZCBraW5kIG9mIFpBRzwv
bXRleHQ+IgorCiAgICAgZm9ybWF0WmFnMShhcmdzIDogTCBFKSA6IFMgPT0KICAgICAtLSBt
YWtlIGFsdGVybmF0aXZlIFpBRyBmb3JtYXQgd2l0aG91dCBkaW1pbmlzaGluZyBmb250cywg
bWF5YmUKICAgICAtLSB1c2UgYSB0YWJsZQpAQCAtMTI4NSwxMiArMTMxOCwyMyBAQAogCSAg
LS0gd2hlcmUgaXQgYXJpc2VzLiAgUmVtb3ZlZCAyMDA3LTAyLTE0CiAgICAgICAgICAgY29u
Y2F0KGNvbmNhdCgiPG10ZXh0PiIsc3RyKSwiPC9tdGV4dD4iKQogCS0tIGlmIHdlIGdldCB0
byBoZXJlIGRvZXMgdGhhdCBtZWFuIGl0J3MgYSB2YXJpYWJsZT8KKwktLSB0ZXN0IGZvciBz
b21ldGhpbmcgbGlrZSAjXEEgYW5kIHN0cmlwIG9mZiAjXAorCXN0ci4xID0gY2hhciAiIyIg
YW5kIHN0ci4yID0gY2hhciAiXCIgPT4KKwkgICAgdSA6IFVTIDo9IHNlZ21lbnQoMyxsZW4p
JFVTCisJICAgIGNvbmNhdCBbIjxtaT4iLHN0ci51LCI8L21pPiJdCiAgICAgICAgIGNvbmNh
dCBbIjxtaT4iLHN0ciwiPC9taT4iXQogICAgICAgbCA6IEwgRSA6PSAoZXhwciBwcmV0ZW5k
IEwgRSkKICAgICAgIG51bGwgbCA9PiBibGFuawogICAgICAgb3AgOiBTIDo9IHN0cmluZ2lm
eSBmaXJzdCBsCiAgICAgICBhcmdzIDogTCBFIDo9IHJlc3QgbAogICAgICAgbmFyZ3MgOiBJ
IDo9ICNhcmdzCisgICAgICAtLSBuZWVkIHRvIHRlc3QgaGVyZSBpbiBjYXNlIGZpcnN0IGwg
aXMgU1VQRVJTVUIgY2FzZSBhbmQgdGhlbgorICAgICAgLS0gcGFzcyBmaXJzdCBsIGFuZCBh
cmdzIHRvIGZvcm1hdFN1cGVyU3ViLgorICAgICAgcG9zaXRpb24oIlNVUEVSU1VCIixvcCwx
KSA+IDAgPT4KKyAgICAgICAgZm9ybWF0U3VwZXJTdWIoZmlyc3QgbCxhcmdzLG1pblByZWMp
CisgICAgICAtLSBub3cgdGVzdCBmb3IgU1VCCisgICAgICBwb3NpdGlvbigiU1VCIixvcCwx
KSA+IDAgPT4KKyAgICAgICAgZm9ybWF0U3ViMShmaXJzdCBsLGFyZ3MsbWluUHJlYykKIAog
ICAgICAgLS0gc3BlY2lhbCBjYXNlcwogICAgICAgbWVtYmVyPyhvcCwgc3BlY2lhbE9wcykg
PT4gZm9ybWF0U3BlY2lhbChvcCxhcmdzLHByZWMpCkBAIC0xMzEwLDEzICsxMzU0LDYgQEAK
ICAgICAgIC0tIG5hcnkgY2FzZQogICAgICAgbWVtYmVyPyhvcCxuYXJ5TkdPcHMpID0+IGZv
cm1hdE5hcnlOb0dyb3VwKG9wLGFyZ3MsIHByZWMpCiAgICAgICBtZW1iZXI/KG9wLG5hcnlP
cHMpID0+IGZvcm1hdE5hcnkob3AsYXJncywgcHJlYykKLSAgICAgIC0tIG5lZWQgdG8gdGVz
dCBoZXJlIGluIGNhc2UgZmlyc3QgbCBpcyBTVVBFUlNVQiBjYXNlIGFuZCB0aGVuCi0gICAg
ICAtLSBwYXNzIGZpcnN0IGwgYW5kIGFyZ3MgdG8gZm9ybWF0U3VwZXJTdWIuCi0gICAgICBw
b3NpdGlvbigiU1VQRVJTVUIiLG9wLDEpID4gMCA9PgotICAgICAgICBmb3JtYXRTdXBlclN1
YihmaXJzdCBsLGFyZ3MsbWluUHJlYykKLSAgICAgIC0tIG5vdyB0ZXN0IGZvciBTVUIKLSAg
ICAgIHBvc2l0aW9uKCJTVUIiLG9wLDEpID4gMCA9PgotICAgICAgICBmb3JtYXRTdWIoZmly
c3QgbCxhcmdzLG1pblByZWMpCiAKICAgICAgIG9wIDo9IGZvcm1hdE1tbChmaXJzdCBsLG1p
blByZWMpCiAgICAgICBmb3JtYXRGdW5jdGlvbihvcCxhcmdzLHByZWMpCg==

----b620720a9fa61d4929e--

\start
Date: Sun, 16 Dec 2007 08:51:38 -0800
From: Arthur Ralfs
To: list
Subject: mathml vertical bar problem

Tim,

I don't see this problem, i.e. when I do
m1:=matrix [[1,2,1],[2,1,-2],[1,-2,4]]
eigenvalues(m1)

I get the correct display with the vertical bar.

Are you still getting the wrong display?

\start
Date: Sun, 16 Dec 2007 13:57:03 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: Re: regression tests

Martin,

The test facility is based on the regress function which is a lisp
function loaded into the axiom interpreter.

Regression test files contain the expected results. The format is

)spool foo.output                               (0)
--S n of m                                      (1)
2+2                                             (2)
--R                                             (3)
--R  (1) 4                                      
--R                 Type: PositiveInteger
--E n                                           (4)

(...repeat blocks as desired...)

)spool                                          (5)


The file consists of blocks of the above form where:
  (0) is the output file which will contain the output of the regression test
      Note that the input regression test file is a standard axiom 
      input file. all of the markup used for regression testing are
      in axiom comment lines starting with --. thus you can run the
      input files without checking the results.
  (1) is a marker that a test is starting. n of m is a comment
  (2) is the expression to evaluate
  (3) there are result lines that are compared char-by-char with 
      the actual result. these are easily created by clipping a
      prior version and prefixing each line with --R
        In addition, some lines contain gensym symbols which 
      change from run to run. they can be prefixed with --I (ignore)
  (4) is a marker ending the test
  (5) at the end we close the file.

To create a regression test file you simply 
  (a) create an input file,
  (b) run it, 
  (c) comment out the actual results by prefixing them with --R.
  (d) delimit each result with --S and --E
  (e) add it to the REGRES stanza in the src/input/Makefile.pamphlet
  (f) store the foo.input.pamphlet file in src/input

The process for running regression testing has 2 steps which are 
run automatically by the Makefile but can also be done by hand.
  (a) )read foo
      which causes foo.output to be created containing the new
      results followed by the commented expected results and
      delimited by the --S and --E markers.
  (b) )lisp (regress "foo.output")
      which checks the new results against the expected results
      and creates "foo.regress" which contains pass/fail markers

\start
Date: Sun, 16 Dec 2007 14:34:58 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: Re: regression tests

Martin,

There are a few "design points" about the regression test facility
that you might need to know if you plan to redesign it. 

o) The tests are independent chunks 
     This allows them to be arranged logically in the pamphlet files

o) The comment markers are easily stripped 
     This allows the original output to be displayed 

o) It does not impact the current )input mechanism
     This leads to the design choice of using prefix comments
     so that the input files are standard input files

o) It was designed to integrate into the algebra
     Some of the regression test files live in the algebra pamphlets
     rather than the src/input directory. They are automatically
     extracted from the pamphlets at build time. (I've released
     this to silver)

     I've been working on writing function-by-function test cases
     (not yet released to silver) in the algebra pamphlets. These
     are automatically collected up into a regression test file
     which is tested at runtime.

o) It was designed to document the algebra.
     The chunks can live just above the function they document
     so the explanations and tests are next to the code.

o) It will be the basis of the )example facility
     Recently I recreated the )help facility. The sources for the )help
     live in the algebra pamphlets and explain the domains. 

     The next step (not yet released to silver) is the )example
     facility which will show how to invoke a function in a domain.
     So rather than the current foo: D -> D where D is....
     output you can see actual examples.
 
o) It will be the basis of the )browse examples
     On friday I released the new )browse and firefox facility to
     silver. This is planned to replace hyperdoc with system-independent
     code. One of the top-level hyperlinks is "examples". The regression
     test files will be the basis of these pages.

\start
Date: Sun, 16 Dec 2007 15:00:49 -0500
From: Tim Daly
To: list
Subject: 20071215.01.tpd.patch

For some reason this changeset does not appear on the list.
This is my 4th try.

This changeset creates a new hyperdoc facility that can be used from a browser.

This is not production-ready but is first-draft. There are many known
problems but please post anything you find wrong. 

This work is a joint effort with Arthur Ralfs and Alfredo Portes. 
Alasdair McAndrew contributed the Cryptography pages. 
I contributed the mistakes.



To use this you start Axiom and type

   )browse

at the command prompt. Axiom will now serve AJAX pages on port 8085.
To see the new hyper pages in the browser you need to know the local
IP address (127.0.0.1 should work) and the path to $AXIOM, which we
will assume is something like /usr/local/axiom/mnt/linux. 

It is also assumed that your browser supports AJAX and mathML. All
testing has been done using Firefox which supports both. If it doesn't
work in your browser please post javascript patches. I had to learn
javascript for this effort and I'm not familiar with browser-specific
hacks.

Start your firefox browser and go to:

  http://127.0.0.1:8085/usr/local/axiom/mnt/linux/doc/hypertex/rootpage.xhtml

that is

  http://(yourIP):8085(your$AXIOM)/doc/hypertex/rootpage.xhtml

Note: the ".xhtml" is not a typo. It really is .xhtml.

Note that Firefox has Tools->Javascript Console for debugging. 
The Axiom browser pages should not generate any error messages there.
Please post any error messages you find (along with diff-Naur fixes?).

Note that you can run Axiom on linux and reach it from anywhere once
it starts serving pages. So it is possible to put up a copy of Axiom
that serves browser pages while using another copy to do useful work.
It is also possible to serve pages to a Windows box, obviously.

The "Any Command" will eventually become a workbook kind of interface
that will allow you to work on Axiom directly from the browser. Thus
you can run Axiom anywhere and work on it from somewhere else.

I still don't know how to do drag-and-drop to a browser page so if
anyone knows how (or finds a tutorial how) to do this, please let me
know. I'd like to enable dragging a pamphlet file onto Axiom and have
it installed automatically.





Handling MathML Fonts

The last entry in the rootpage is a Fonts page which will test whether
you have the proper fonts installed to handle the Axiom MathML output.
If not, see the FAQ 44: I don't have the math fonts. 

There is a file zips/axiomfonts.tgz which contains some linux and stix
fonts as well as some instructions for downloading the
free-but-non-distributable Mathematica fonts. I gave a couple
instructions for installing linux fonts in the README file inside
axiomfonts.tgz. If you do need to install fonts, please document the
process and post it so we can all benefit.




Working

Most of the working pages exist under the Basic Commands and Topics
pages. Arthur Ralf's version of the Axiom book, converted to MathML
and AJAX, exists under the Axiom Textbook link. (see src/hyper/axbook.tgz)

All of the html pages are in src/hyper/bookvol11.pamphlet. That file
also contains instructions for creating new pages. 

The rootpage background image is src/hyper/bigbayou.png. 
The per-page banner is src/hyper/doctitle.png.

There are new pages that do not exist in the current hyperdoc.
For instance Topics->Cryptography contains the course notes for
Alasdair McAndrew's Cryptography course.

More new pages are planned but not yet available. It is very easy to
create new pages so I expect that people will find adding
documentation using html acceptable. It was possible to add pages to
hyperdoc but I don't know of anyone who wrote new pages except the
original group. Hopefully this will change now that they are html.

I have started trying to add new pages related to external material.
I've been auditing the MIT Courseware Mathematical Methods course.
My notes are being written into pages (see Topics->Mathematical Methods).

Other links are known not to work. Some of the pages have been 
partially expanded and you will hit "page not implemented".




Not working

The basic functionality of all of the hyperdoc exists but there is
still a lot of conversion work to be done for many pages. There has
been no attention paid to the 
  Axiom Tutorial, 
  Reference, 
  Browser, 
  Examples,
  Settings, and 
  What's New 
links. The 
  Any Command 
link used to work but was broken by recent changes.



The )browse command

The )browse command has been added to the system. As part of this
change some of the top level command handling has been added to book
volume 5 (the interpreter, see src/interp/bookvol5.pamphlet).  There
has been a rewrite of some of the top-level command handling into
lisp. Various functions have been brought together and documented. 
Further collection, rewrite, and documentation of the command handling 
will occur with new updates.

Note that there is currently no exit from the browse command.
Once it starts serving pages you have to interrupt the command loop.
Interrupting the command loop will leave the socket hung so you cannot
restart the )browse command. An EXIT command from the browser is planned.

The )browse command needs to accept a port and a path as arguments.
Currently these are hardcoded as "8085" and "/". The default should
be your $AXIOM variable if it is set.





Hyperdoc

Hyperdoc is unchanged. It should still work. However, the plan is
to completely drop hyperdoc, all C source code, all pages, and any
supporting boot/lisp functionality once the browser becomes stable.
This should considerably reduce the system complexity and reduce
the need for X11. (The graphics needs to be redone before all the
C and X11 support can disappear.)





The axserver.spad file

The src/algebra/axserver.spad file is the primary support for the 
AJAX/browser interface. It has been rewritten and expanded to handle
lisp calls, )show calls, and database lookups from the browser. 

Note that changing this file could potentially break the )browse
command.  Axiom hashes function names and changing the file MIGHT
break the hash. The |browse| command is sensitive to the hash which
might or might not change if the file is changed.  (See
src/interp/bookvol5, function |browse|)




The TODO list

It's long and, for the most part, tedious. 
 o Pages need to be converted from hyperdoc. 
 o The tutorial book needs to be converted to AJAX/MathML.
 o The Graphics needs to be embedded in a canvas tag. 
 o The notebook interface will replace the Any Command so that Axiom 
   can be used directly in the browser. 
 o The EXIT command needs to exit )browse and reset the socket. 
 o The )browse command needs )port and )path options
 o The input/regression test files need to be integrated into the browser 
   as examples. 
 o The )help files need to be integrated into the browser. 
 o The dvi files need to be processed into pdf so the
   source code can be displayed in the browser.
 o Automatic html cross-linking needs to be integrated into the build.
 o Live links from the source code need to be hyperlinks.
 o Axiom error message need html links to browse for further information
 o Pamphlet drag-and-drop needs to be demonstrated.
 o etc.

Tim

\start
Date: Sun, 16 Dec 2007 08:33:37 -1100 (SST)
From: Waldek Hebisch
To: list
Subject: Re: mathml hex(10) patch

Ralpf,

You wrote:
> Tim, Waldek,<br><br>This patch is a band-aid for the hex(10) bug.
<snip>
> @@ -1285,6 +1307,10 @@
>  	  -- where it arises.  Removed 2007-02-14
>            concat(concat("<mtext>",str),"</mtext>")
>  	-- if we get to here does that mean it's a variable?
> +	-- test for something like #\A and strip off #\
> +	str.1 = char "#" and str.2 = char "\" =>
> +	    u : US := segment(3,len)$US
> +	    concat ["<mi>",str.u,"</mi>"]
>          concat ["<mi>",str,"</mi>"]
>        l : L E := (expr pretend L E)
>        null l => blank
> 

I wonder if we can get here with a string -- for string this is
clearly wrong.  AFAICS the start of 'hex(10)' problem is in
the line:

    stringify expr == (object2String$Lisp expr)@S

object2String converts character using _Lisp_ rules:

object2String x ==
  STRINGP x => x
  IDENTP x  => PNAME x
  NULL x    => '""
  PAIRP  x  => STRCONC(object2String first x, object2String rest x)
  WRITE_-TO_-STRING x

so you get '#\A' here.  I am not sure if we ever want '#\A' in
"math" output -- if no we could just use a function which would
convert characters to length 1 strings.

\start
Date: Sun, 16 Dec 2007 09:12:40 -1100 (SST)
From: Waldek Hebisch
To: list
Subject: Re: mathml patch


> Hi Tim, Waldek,<br><br>This patch covers a few typos in the documentation
> and the correction for<br>"continuedFraction(3,repeating [1], repeating
> [3,6])".
> Waldek your patch<br>for this one missed the last "ZAG" in the case of
> a finite continued fraction<br>and replaced it with an ellipsis.
> I've added a test to see if the last argument<br>is a ZAG or an ellipsis.
> If neither then I give an error but still deliver valid<br>MathML, i.e.
> the error is contained in an mtext element

I am not sure why do you want to deliver valid MathML in this case.
Namely, getting to formatZag with something else is a bug -- either
in code genereting unexpected thing or in formatZag.  So, the output
is incorrect anyway.  But if you only deliver text inside MathML
it may easily be overlooked.

In general, I feel that instead of guessing what given construct
means you should just throw errors: once an unhandled construct
appears it is easy to catch error in the debugger and find out
what it means.  If you try to mask errors debugging becomes much
harder...


> Would you like this as a series of patches<br>or one big one at the end?
> Or since the package may end up being largely<br>rewritten maybe I should
> just send the rewritten package?

I prefer small patches -- it makes discussing changes much easier.
But if you fell that changes are mutually dependent then combining
them is OK.

\start
Date: Sun, 16 Dec 2007 12:40:14 -0800
From: Arthur Ralfs
To: list
Subject: re: mathml patch

----- Original Message -----

> 
> > Hi Tim, Waldek,<br><br>This patch covers a few typos in 
> the documentation
> > and the correction for<br>"continuedFraction(3,repeating 
> =5B1=5D, repeating
> > =5B3,6=5D)".
> > Waldek your patch<br>for this one missed the last "ZAG" in 
> the case of
> > a finite continued fraction<br>and replaced it with an ellipsis.
> > I=27ve added a test to see if the last argument<br>is a ZAG 
> or an ellipsis.
> > If neither then I give an error but still deliver 
> valid<br>MathML, i.e.
> > the error is contained in an mtext element
> 
> I am not sure why do you want to deliver valid MathML in this case.
> Namely, getting to formatZag with something else is a bug -- either
> in code genereting unexpected thing or in formatZag.; So, 
> the output
> is incorrect anyway.; But if you only deliver text inside MathML
> it may easily be overlooked.
> 
> In general, I feel that instead of guessing what given construct
> means you should just throw errors: once an unhandled construct
> appears it is easy to catch error in the debugger and find out
> what it means.; If you try to mask errors debugging becomes much
> harder...
> 
That=27s OK with me.; Tim, what do you think?; My own thought was 
that the text inside the MathML would stick out pretty conspicuously
but I don=27t have any objection to doing what you suggest.

Arthur

> 
> > Would you like this as a series of patches<br>or one big 
> one at the end?
> > Or since the package may end up being largely<br>rewritten 
> maybe I should
> > just send the rewritten package?
> 
> I prefer small patches -- it makes discussing changes much easier.
> But if you fell that changes are mutually dependent then combining
> them is OK.
> 
> -- 
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Waldek Hebisch
> hebisch=40math.uni.wroc.pl 
> 

\start
Date: Sun, 16 Dec 2007 12:56:44 -0800
From: Arthur Ralfs
To: list
Subject: re: mathml hex(10) patch


Do you think we can rewrite the stringify function to do the
right thing?; I'm not sure how to proceed.; I copied stringify
from the TeX domain.

\start
Date: Sun, 16 Dec 2007 15:25:55 -0600
From: Tim Daly
To: Arthur Ralfs
Subject: (no subject)

>>In general, I fee that instead of guessing what given construct
>> means you should just throw errors; once an unhandled construct
>> appears it is easy to catch errors in the debugger and find out
>> what it means. If you try to mask errors debugging becomes much
>> harder

> That's OK with me. ...

I'm a big fan of "exact debugging". That is, give enough unique information
to make it perfectly clear where and why the error occurs. 
For instance, you'll see
   
  @echo NNN this stanza does this

all over the Makefiles so I can instantly pinpoint where the problem occurs.
Once I know where and once I have a failing input it usually takes only a
few minutes to fix.

As Waldek says, if there is wrong-but-not-failing output then I have to
understand the whole architecture of how MathML support works to try to
find the failure.

So something like: 

  ERROR NNN: I got <this> and was trying to do <this> in routine <here>

really narrows the scope of the problem. I don't need a debugger anymore.

\start
Date: Sun, 16 Dec 2007 10:44:11 -1100 (SST)
From: Waldek Hebisch
To: list
Subject: Re: mathml hex(10) patch

Arthur Ralfs wrote:
> From: Waldek Hebisch
> > You wrote:
> > > Tim, Waldek,<br><br>This patch is a band-aid for the
> > hex(10) bug.
> > <snip>
> > > @@ -1285,6 +1307,10 @@
> > >;;;;;;;;;;; -- where it arises.; Removed 2007-=
02-14
> > >;;;;;;;;;;; concat(concat("<mtext>",str),"</mtex=
t>")
> > >;;	-- if we get to here does that mean it's a variable?
> > > +	-- test for something like #\A and strip off #\
> > > +	str.1 = char "#" and str.2 = char "\" =>
> > >
> > +;;;;;;;;;;; u : US := segment(3,len)$US
> > >
> > +;;;;;;;;;;; concat ["<mi>",str.u,"</mi>"]
> > >;;;;;;;;; concat
> > ["<mi>",str,"</mi>"]>;;;;;;; l : L E := (expr pretend L=
 E)
> > >;;;;;;; null l => blank
> > >
> >
> > I wonder if we can get here with a string -- for string this is
> > clearly wrong.; AFAICS the start of 'hex(10)' problem is in
> > the line:
> >
> > ;;; stringify expr == (object2String$Lisp expr)@S
> >
> > object2String converts character using _Lisp_ rules:
> >
> > object2String x ==
> > ; STRINGP x => x
> > ; IDENTP x; => PNAME x
> > ; NULL x;;; => '""
> > ; PAIRP; x; => STRCONC(object2String first x,
> > object2String rest x)
> > ; WRITE_-TO_-STRING x
> >
> > so you get '#\A' here.; I am not sure if we ever want '#\A' in
> > "math" output -- if no we could just use a function which would
> > convert characters to length 1 strings.
> >
> ;Do you think we can rewrite the stringify function to do the
> right thing?; I'm not sure how to proceed.; I copied stringify
> from the TeX domain.
>

The following add a 'mathObject2String' function to convert characters
to length one strings and all other object using old rules.

--- trunk.bb/src/interp/format.boot	2007-12-16 17:25:14.000000000 +0100
+++ trunk/src/interp/format.boot	2007-12-16 22:22:40.000000000 +0100
@@ -706,6 +706,10 @@
     concat("attribute: ",form2String form)
   form2String x

+mathObject2String x ==
+  CHARACTERP x => COERCE([x],'STRING)
+  object2String x
+
 object2String x ==
   STRINGP x => x
   IDENTP x  => PNAME x

given this function it should be enough to change stringify to call
mathObject2String (instead of object2String).

Concerning TeX: TeX output has the same problem...

\start
Date: Sun, 16 Dec 2007 15:43:31 -0600
From: Tim Daly
To: Martin Rubey
Subject: (no subject)

Martin, Waldek,

I've attached the regress.lisp.pamphlet file. 

  notangle -t8 regress.lisp.pamphlet >regress.lisp

should extract the lisp code. If you add this file to your system
and add the following stanzas to your Makefile you can install the
regression test files. I've been converting the standard input files
to regression test format. The details are in the regress.dvi file.

The regression test files are in the src/input directory in the
trunk on sourceforge SVN.



The related Makefile stanzas are:

%.input: ${IN}/%.input.pamphlet
	@ echo generic 16 making ${MID}/$*.input from ${IN}/$*.input.pamphlet
	@(cd ${MID} ; \
	  ${TANGLE} ${IN}/$*.input.pamphlet >$*.input )

%.regress: %.input
	@ echo regression testing $*
	@ rm -f $*.output
	@ echo ')read $*.input' | ${TESTSYS} 
	@ rm $*.input
	@ echo ')lisp (regress "$*.output")' | ${TESTSYS} \
                | egrep -v '(Timestamp|Version)' | tee $*.regress


The first stanza extracts the input file.
The second stanza runs the files listed in the REGRES variable
of the form 

REGRESS=foo.regress

which expects a foo.input, which is generated from the first stanza.
The current list of regression test files is:



REGRES= algaggr.regress algbrbf.regress  algfacob.regress alist.regress  \
    allfact.regress   antoine.regress \
    arith.regress     array1.regress   array2.regress \
    arrows.regress    assign.regress   atansqrt.regress \
    bags.regress      bbtree.regress \
    binary.regress    bop.regress      bstree.regress   bouquet.regress \
    bug10069.regress \
    bugs.regress      bug10312.regress bug6357.regress  bug9057.regress \
    calculus2.regress calculus.regress cardinal.regress card.regress \
    carten.regress    cclass.regress   char.regress     ch.regress \
    clifford.regress  clif.regress     coercels.regress collect.regress \
    complex.regress   conformal.regress \
    constant.regress  contfrac.regress contfrc.regress \
    curl.regress      cycles1.regress  cycles.regress   cyfactor.regress \
    danzwill.regress  decimal.regress  defintef.regress defintrf.regress \
    derham.regress    dfloat.regress   dhtri.regress    divisor.regress \
    dmp.regress       dpol.regress     easter.regress   efi.regress \
    eigen.regress     elemfun.regress  elemnum.regress  elfuts.regress \
    elt.regress       eq.regress       eqtbl.regress    equation2.regress \
    equation.regress  evalex.regress   eval.regress     exdiff.regress \
    exint.regress     exit.regress     exlap.regress    exlimit.regress \
    expexpan.regress  explim.regress   expr1.regress    exprode.regress \
    expr.regress      exseries.regress exsum.regress    exprpoly.regress \
    farray.regress    ffdemo.regress   fferr.regress    ffx72.regress \
    fib.regress       file.regress     float1.regress   float2.regress \
    float.regress     fname1.regress   fname.regress    fnla.regress \
    fns.regress       fparfrac.regress fparfrc.regress  fr1.regress \
    fr2.regress       frac.regress     fr.regress       galois.regress \
    gbf.regress       genups.regress   gonshor.regress  grpthry.regress \
    gstbl.regress     heap.regress     heat.regress     help.regress \
    herm.regress      hexadec.regress  ico.regress      ideal.regress \
    ifact.regress     infprod.regress  intaf.regress    intdeq.regress \
    intef2.regress    intef.regress    intg0.regress    intheory.regress \
    intmix2.regress   intmix.regress   int.regress      intrf.regress \
    ipftest.regress   is.regress       isprime.regress  kafile.regress \
    kernel.regress    knot2.regress    kovacic.regress  kuipers.regress \
    laplace.regress   leg.regress      limit.regress    lindep.regress \
    list.regress      lode.regress     lodesys.regress  lodo1.regress \
    lodo2.regress     lodo3.regress    lodof.regress    lodo.regress \
    lpoly.regress     lupfact.regress  lword.regress    macbug.regress \
    macros.regress    magma.regress    mapleok.regress  mappkg1.regress \
    matbug.regress    matrix1.regress  matrix22.regress matrix.regress \
    mfinfact.regress  mkfunc.regress   mpoly.regress    mset2.regress \
    mset.regress      multfact.regress multiple.regress ndftip.regress \
    negfloats.regress nepip.regress    newlodo.regress  newton.regress \
    nlode.regress     none.regress     noonburg.regress noptip.regress \
    nqip.regress      nsfip.regress    numbers.regress  octonion.regress \
    oct.regress       ode.regress      odpol.regress    op1.regress \
    opalg.regress     operator.regress op.regress       ovar.regress \
    padic.regress     parabola.regress pascal1.regress  pascal.regress \
    patmatch.regress  pat.regress      perman.regress   perm.regress \
    pfr1.regress      pfr.regress      page.regress     pmint.regress \
    poly1.regress     polycoer.regress poly.regress     psgenfcn.regress \
    quat1.regress     quat.regress     r20abugs.regress r20bugs.regress \
    r21bugsbig.regress r21bugs.regress radff.regress    radix.regress \
    realclos.regress  reclos.regress   repa6.regress    robidoux.regress \
    roman.regress     roots.regress    ruleset.regress  rules.regress \
    scherk.regress    scope.regress    segbind.regress  seg.regress \
    series2.regress   series.regress   sersolve.regress set.regress \
    sinCosEx.regress  sint.regress     skew.regress     slowint.regress \
    solvetra.regress  space3.regress   sqmatrix.regress sregset.regress \
    stbl.regress      stream2.regress  stream.regress   streams.regress \
    string.regress    strtbl.regress   symbol.regress   t111293.regress \
    table.regress     tanatan.regress  textfile.regress torus.regress \
    triglim.regress   tsetcatvermeer.regress            tutchap1.regress \
    void.regress      uniseg.regress



Tim

==========================================================================
src/interp/regress.lisp.pamphlet
==========================================================================
\documentclass{article}
\usepackage{axiom}
\begin{document}
\title{\$SPAD/src/interp regress.lisp}
\author{Timothy Daly}
\maketitle
\begin{abstract}
This is the regression test mechanism. The input files have been
rewritten to have a standard structure. This fixed format identifies
the tests within a file. Each test is run and any mismatch between
the actual and expected results is reported.
\end{abstract}
\eject
\tableofcontents
\eject
\section{Regress}
In order to regression test axiom results we created a standard
file format. This format has 3 kinds of markers:
\begin{itemize}
\item ``--S'' marker which must have a integer test number
\item ``--R'' marker lines, one per expected output from axiom
\item ``--E'' marker which has an integer matching the preceeding ``--S''
\item ``--I'' marker ignores the line, useful for gensyms and random
\end{itemize}
Because these markers use Axiom's standard comment prefix they
are valid lines in input files and are ignored by the ``)read''
command. They are simply copied to the output file. This allows
us to include the expected output in the output file so we can
compare what Axiom computes with what it should compute.

To create these regression files all you need to do is create an
input file and run it through Axiom. Then, for each test case in
the file you mark it up by putting a ``--S number'' {\bf before}
the Axiom input line. You put ``--R'' prefixes on each line of
Axiom output, including the blank lines. Then you put a ``--E number''
line after the last output line, usually the {\tt Type:} line.
This newly marked-up input file is now a regression test.

To actually run the regression test you simply include the
marked up the input file in the {\tt src/input} subdirectory.
This file will automatically be run at build time and any failing
tests will be marked. This code will ignore any input that does
not contain proper regression markups.

Ideally the regression test files should be pamphlet files that
explain the content and purpose of each regression test case.

Thus you run the marked-up input file {\tt foo.input}
and spool the result to {\tt foo.output} and then run the 
lisp function\\ 
{\tt (regress ``foo.output'')}

If the file does not contain proper regression markups it is
ignored. Comments or any other commands in the file that are not
surrounded by ``--S'' and ``--E'' boundaries are ignored.

\subsection{defun regress}
This function takes an output file which has been created by the
Axiom {\tt )spool} command and looks for regression test markups.
Each regression test is checked against the actual result and any
failures are marked. 
<<*>>=
(in-package "BOOT")

(defun regress (infile)
 (let (name comment test (count 0) (passed 0) (failed 0))
  (with-open-file (stream infile :direction :input)
   (setq name (getspoolname stream)) 
   (when name
    (format t "testing ~a~%" name)
    (loop
     (multiple-value-setq (comment test) (findnexttest stream))
     (unless comment (return))
     (setq count (+ count 1))
     (if (testpassed test)
      (progn
       (setq passed (+ passed 1))
       (format t "passed ~a ~a~%" name comment))
      (progn
       (setq failed (+ failed 1))
       (format t "FAILED ~a ~a~%" name comment))))
   (if (= failed 0)
    (format t "regression result passed ~a of ~a stanzas ~Tfile ~a~%"
     passed count name)
    (format t "regression result FAILED ~a of ~a stanzas ~Tfile ~a~%"
     failed count name))))))

@
\subsection{defun getspoolname}
We need to parse out the name of the test. The ``)spool'' command
writes a line into the output file containing the name of the test.
We parse out the name of the test from this line.
<<*>>=
(defun getspoolname (stream)
 (let (line point)
  (setq line (read-line stream))
  (setq point (position #\. line))
  (if (or (null point) 
      (< (length line) 30)
      (not (string= (subseq line (+ point 1) (+ point 7)) "output")))
    nil
  (subseq line 20 point))))

@
\subsection{defun findnexttest}
We need to break the file into separate test cases. This routine
looks for the ``--S'' line which indicates a test is starting. It
collects up input lines until it encounters the ``--E'' line marking
the end of the test case. These lines are returned as a list of strings.
<<*>>=
(defun findnexttest (stream)
 (let (teststart result)
  (do ((line (read-line stream nil 'done) (read-line stream nil 'done)))
      ((or (eq line 'done) (endedp line))
        (values (if line teststart) result))
   (if teststart 
    (push line result) 
    (setq teststart (testnumberp line))))))

@
\subsection{defun testnumberp}
The ``--S'' line has a test number on the line. We parse out the
test number for printing.
<<*>>=
(defun testnumberp (oneline)
 (when (startp oneline) (subseq oneline 3)))
;  (parse-integer (string-trim '(#\Space) (subseq oneline 3)))))

@
\subsection{defun testpassed}
This routine takes the test input, passes it to split to clean up
and break into two lists, and then compares the resulting lists
element by element, complaining about any mismatches. The result
is either true if everything passes or false if a mismatch occurs.

A test line can also be considered at passing if the expected line
is the string ``ignore''.
<<*>>=
(defun testpassed (test)
 (let (answer expected (passed t))
  (multiple-value-setq (answer expected) (split test))
  (dotimes (i (length answer))
   (unless 
    (or (string= (first expected) "ignore")
        (string= (first expected) (first answer)))
    (setq passed nil)
    (format t "MISMATCH~%expected:~s~%     got:~s~%" 
     (first expected) (first answer)))
   (pop answer)
   (pop expected))
  passed))

@
\subsection{defun split}
We have a list containing all of the lines in a test. The input is of
the form:
\begin{verbatim}
("--R                                         Type: List Integer"
 "--R   (1)  [1,4,2,- 6,0,3,5,4,2,3]" 
 "--R" 
 "--R "
 "                                         Type: List Integer"
 "   (1)  [1,4,2,- 6,0,3,5,4,2,3]" 
 "" 
 " "
 "l := [1,4,2,-6,0,3,5,4,2,3]")
\end{verbatim}
It removes the ``--R'' prefix from the result strings
and generates two hopefully equal-length lists, thus:
\begin{verbatim}
("                                         Type: List Integer"
 "   (1)  [1,4,2,- 6,0,3,5,4,2,3]" 
 "" 
 " ")
("                                         Type: List Integer"
 "   (1)  [1,4,2,- 6,0,3,5,4,2,3]" 
 "" 
 " "))
\end{verbatim}
Thus the first line is the start line, the second line is the Axiom 
input line, followed by the Axiom output. Then we have the lines marked
``--R'' which are the expected result. We split these into two separate
lists and throw way the lines that are the start and end lines. 

Once we
have classified all of the lines we need to throw away the input lines.
By assumption there will be more answer lines than expected lines because
the input lines are included. And given the way we process the file these
input lines are on the top of the answer stack. Since the number of
answer lines should equal the number of expected lines we pop the
stack until the numbers are equal.

Each element of the answer list should
be {\tt string=} to the corresponding element of the result list.

If the input line starts with ``--I'' we push the string ``ignore''.
This is useful for handling random results or gensym symbols.
<<*>>=
(defun split (test)
 (let (answer (acnt 0) expected (ecnt 0))
  (dolist (oneline test)
   (cond
    ((startp oneline))
    ((endedp oneline))
    ((ignorep oneline)
      (setq ecnt (+ ecnt 1))
      (push "ignore" expected))
    ((resultp oneline)
      (setq ecnt (+ ecnt 1))
      (push (subseq oneline 3) expected))
    (t 
      (setq acnt (+ acnt 1))
      (push oneline answer))))
  (dotimes (i (- acnt ecnt)) (pop answer))
  (values (nreverse answer) (nreverse expected))))

@
\subsection{defun startp}
This test returns true if we have a ``start'' line. That is, a line
with a ``--S'' prefix.
<<*>>=
(defun startp (oneline)
 (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--S")))

@
\subsection{defun endedp}
This test returns true if we have a ``ended'' line. That is, a line
with a ``--E'' prefix.
<<*>>=
(defun endedp (oneline)
 (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--E")))

@
\subsection{defun resultp}
This test returns true if we have a ``results'' line. That is, a line
with a ``--R'' prefix.
<<*>>=
(defun resultp (oneline)
 (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--R")))

@
\subsection{defun ignorep}
This test returns true if we have an ``ignore'' line. That is, a line
with a ``--I'' prefix.
<<*>>=
(defun ignorep (oneline)
 (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--I")))

@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}

\start
Date: Sun, 16 Dec 2007 21:48:09 -0600
From: Tim Daly
To: list
Subject: 20071216.03.acr.patch mathml derivative patch (7019)

This patch fixes the problem with derivatives. That is,

F:=operator 'F
x:=operator 'x
y:=operator 'y
a:=F(x z,y z,z^2)*x y(z+1)
D(a,z)

The MathML output for F,3 is now correct.

Tim

=======================================================================

diff --git a/changelog b/changelog
index 49e15d1..6759734 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071216 acr src/algebra/mathml.spad fix F,3 mathml rendering (7019)
 20071216 tpd Makefile fix mistake of using wrong Makefile for Xpm fix (7045)
 20071216 cys Makefile add -lXpm to loader flags (7045)
 20071215 gxv src/graph/viewman/makegraph.c discardGraph free corrected (7023)
diff --git a/src/algebra/mathml.spad.pamphlet b/src/algebra/mathml.spad.pamphlet
index e5eaaf7..be7cf47 100644
--- a/src/algebra/mathml.spad.pamphlet
+++ b/src/algebra/mathml.spad.pamphlet
@@ -25,14 +25,14 @@ MathML exists in two forms: presentation and content.
 At this time (2007-02-11) the package only has a presentation
 package.  A content package is in the
 works however it is more difficult.  Unfortunately Axiom does
-not make its semantics easliy available.  The \spadtype{OutputForm}
+not make its semantics easily available.  The \spadtype{OutputForm}
 domain mediates between the individual Axiom domains and the
 user visible output but \spadtype{OutputForm} does not provide full
 semantic information.  From my currently incomplete understanding
 of Axiom it appears that remedying this would entail going back
 to the individual domains and rewriting a lot of code.
 However some semantics are conveyed directly by \spadtype{OutputForm} and other
-things can be deduced from \spadtype{OutputForm} or form the original
+things can be deduced from \spadtype{OutputForm} or from the original
 user command.
 
 \section{Displaying MathML}
@@ -107,7 +107,7 @@ subscripts, superscripts, presubscripts and presuperscripts however
 I don't know of any Axiom command that produces such an object. In
 fact at present I see the case of "SUPERSUB" being used for putting
 primes in the superscript position to denote ordinary differentiation.
-I also only see the "SUB" case being only used to denote partial
+I also only see the "SUB" case being used to denote partial
 derivatives.
 
 \section{)set output mathml on}
@@ -116,7 +116,7 @@ derivatives.
 Making mathml appear as output during a normal Axiom session
 by invoking ")set output mathml on" proved to be a bit tedious
 and seems to be undocumented.  I document my experience here
-in case in proves useful to somebody else trying to get a new
+in case it proves useful to somebody else trying to get a new
 output format from Axiom.
 
 In \spadtype{MathMLFormat} the functions 
@@ -231,7 +231,7 @@ Add the line "($\vert{}$MathMLFormat$\vert$ . MMLFORM)"
 
 I don't see that this file is used anywhere but I made
 the appropriate changes anyway by searching for "TEX" and
-mimicing everthing for MMLFORM.
+mimicing everything for MMLFORM.
 
 \subsection{File src/doc/axiom.bib.pamphlet}
 
@@ -285,14 +285,14 @@ provide abbreviations for domains used heavily in the code.
 The publicly exposed functions are:
 
     \spadfun{coerce: E -$>$ S}  This function is the main one for converting
-and expression in domain OutputForm into a MathML string.
+an expression in domain OutputForm into a MathML string.
 
-    \spadfun{coerceS: E -$>$ S}  This function is for use from the command line.
+    \spadfun{coerceS: E -$>$ S} This function is for use from the command line.
 It converts an OutputForm expression into a MathML string and does
 some formatting so that the output is not one long line.  If you take
 the output from this function, stick it in an emacs buffer in
 nxml-mode and then indent according to mode, you'll get something that's
-nicer to look at than comes from coerce. Note that coerceS returns
+nicer to look at than what comes from coerce. Note that coerceS returns
 the same value as coerce but invokes a display function as well so that
 the result will be printed twice in different formats.  The need for this
 is that the output from coerce is automatically formatted with line breaks
@@ -377,7 +377,7 @@ MathMLFormat(): public == private where
     import List OutputForm
     import List String
 
-    -- local variables declarations and definitions
+    -- local variable declarations and definitions
 
     expr: E
     prec,opPrec: I
@@ -884,6 +884,8 @@ have to be switched by swapping names.
 
     formatSub(expr : E, args : L E, opPrec : I) : S ==
       -- This one produces differential notation partial derivatives.
+      -- It doesn't work in all cases and may not be workable, use
+      -- formatSub1 below for now.
       -- At this time this is only to handle partial derivatives.
       -- If the SUB case handles anything else I'm not aware of it.
       -- This an example of the 4th partial of y(x,z) w.r.t. x,x,z,x
@@ -1002,26 +1004,33 @@ have to be switched by swapping names.
       s := s"</mrow></msub><mo>(</mo>"
       i := 1
       while i < #posLS+1 repeat
-        tmpS := stringify args.i
+--        tmpS := stringify args.i
+	tmpS := formatMml(first args,minPrec)
+	args := rest args
 	s := s"<mi>"tmpS"</mi>"
 	if i < #posLS then s := s"<mo>,</mo>"
 	i := i+1
       s := s"<mo>)</mo>"
 
-    formatSuperSub1(expr : E, args : L E, opPrec : I) : S ==
-      -- this produces differential notation ordinary derivatives.
+    formatSuperSub(expr : E, args : L E, opPrec : I) : S ==
+      -- this produces prime notation ordinary derivatives.
       -- first have to divine the semantics, add cases as needed
+      WriteLine$Lisp "SuperSub1 begin"
       atomE : L E := atomize(expr)      
       op : S := stringify first atomE
-      op ^= "SUPERSUB" => "<mtext>Mistake in formatSuperSub: no SUPERSUB</mtext>"
-      #args ^= 1 => "<mtext>Mistake in SuperSub: #args <> 1</mtext>"
+      WriteLine$Lisp "op: "op
+      op ^= "SUPERSUB" => _
+          "<mtext>Mistake in formatSuperSub: no SUPERSUB1</mtext>"
+      #args ^= 1 => "<mtext>Mistake in SuperSub1: #args <> 1</mtext>"
       var : E := first args
       -- should be looking at something like {{SUPERSUB}{var}{ }{,,...,}} for
       -- example here's the second derivative of y w.r.t. x
       -- {{{SUPERSUB}{y}{ }{,,}}{x}}, expr is the first {} and args is the
       -- {x}
       funcS : S := stringify first rest atomE
+      WriteLine$Lisp "funcS: "funcS
       bvarS : S := stringify first args
+      WriteLine$Lisp "bvarS: "bvarS
       -- count the number of commas
       commaS : S := stringify first rest rest rest atomE
       commaTest : S := ","
@@ -1030,18 +1039,22 @@ have to be switched by swapping names.
         i := i+1
 	commaTest := commaTest","
       s : S := "<msup><mi>"funcS"</mi><mrow>"
+      WriteLine$Lisp "s: "s
       j : I := 0
       while j < i repeat
         s := s"<mo>&#x02032;</mo>"
 	j := j + 1
-      s := s"</mrow></msup><mo>&#x02061;</mo><mo>(</mo><mi>"bvarS"</mi><mo>)</mo>"
+      s := s"</mrow></msup><mo>&#x02061;</mo><mo>(</mo>"formatMml(first args,minPrec)"<mo>)</mo>"
 
-    formatSuperSub(expr : E, args : L E, opPrec : I) : S ==
-      -- This one produces ordinary derivatives with prime notation.
+    formatSuperSub1(expr : E, args : L E, opPrec : I) : S ==
+      -- This one produces ordinary derivatives with differential notation,
+      -- it needs a little more work yet.
       -- first have to divine the semantics, add cases as needed
+      WriteLine$Lisp "SuperSub begin"
       atomE : L E := atomize(expr)      
       op : S := stringify first atomE
-      op ^= "SUPERSUB" => "<mtext>Mistake in formatSuperSub: no SUPERSUB</mtext>"
+      op ^= "SUPERSUB" => _
+         "<mtext>Mistake in formatSuperSub: no SUPERSUB</mtext>"
       #args ^= 1 => "<mtext>Mistake in SuperSub: #args <> 1</mtext>"
       var : E := first args
       -- should be looking at something like {{SUPERSUB}{var}{ }{,,...,}} for
@@ -1057,7 +1070,7 @@ have to be switched by swapping names.
       while position(commaTest,commaS,1) > 0 repeat
         ndiffs := ndiffs+1
 	commaTest := commaTest","
-      s : S := "<mfrac><mrow><msup><mo>&#x02146;</mo><mn>"string(ndiffs)"</mn></msup><mi>"funcS"</mi></mrow><mrow><mo>&#x02146;</mo><msup><mi>"bvarS"</mi><mn>"string(ndiffs)"</mn></msup></mrow></mfrac><mo>&#x02061;</mo><mo>(</mo><mi>"bvarS"</mi><mo>)</mo>"
+      s : S := "<mfrac><mrow><msup><mo>&#x02146;</mo><mn>"string(ndiffs)"</mn></msup><mi>"funcS"</mi></mrow><mrow><mo>&#x02146;</mo><msup><mi>"formatMml(first args,minPrec)"</mi><mn>"string(ndiffs)"</mn></msup></mrow></mfrac><mo>&#x02061;</mo><mo>(</mo><mi>"formatMml(first args,minPrec)"</mi><mo>)</mo>"
 
     formatPlex(op : S, args : L E, prec : I) : S ==
       hold : S
@@ -1191,15 +1204,31 @@ have to be switched by swapping names.
       null args => ""
       p : I := position(op,naryOps)
       p < 1 => error "unknown nary op"
-      -- need to test for "ZAG" case and divert it here, here's an
-      -- example including "op", the args list would be the rest of this
+      -- need to test for "ZAG" case and divert it here
+      -- ex 1. continuedFraction(314159/100000)
       -- {{+}{3}{{ZAG}{1}{7}}{{ZAG}{1}{15}}{{ZAG}{1}{1}}{{ZAG}{1}{25}}
       -- {{ZAG}{1}{1}}{{ZAG}{1}{7}}{{ZAG}{1}{4}}}
-      -- The first arg, the "3" in this case, could be a "ZAG" or something
+      -- this is the preconditioned output form
+      -- including "op", the args list would be the rest of this
+      -- i.e op = '+' and args = {{3}{{ZAG}{1}{7}}{{ZAG}{1}{15}}
+      -- {{ZAG}{1}{1}}{{ZAG}{1}{25}}{{ZAG}{1}{1}}{{ZAG}{1}{7}}{{ZAG}{1}{4}}}
+      -- ex 2. continuedFraction(14159/100000)
+      -- this one doesn't have the leading integer
+      -- {{+}{{ZAG}{1}{7}}{{ZAG}{1}{15}}{{ZAG}{1}{1}}{{ZAG}{1}{25}}
+      -- {{ZAG}{1}{1}}{{ZAG}{1}{7}}{{ZAG}{1}{4}}}
+      --
+      -- ex 3. continuedFraction(3,repeating [1], repeating [3,6])
+      -- {{+}{3}{{ZAG}{1}{3}}{{ZAG}{1}{6}}{{ZAG}{1}{3}}{{ZAG}{1}{6}}
+      -- {{ZAG}{1}{3}}{{ZAG}{1}{6}}{{ZAG}{1}{3}}{{ZAG}{1}{6}}
+      -- {{ZAG}{1}{3}}{{ZAG}{1}{6}}{...}}
+      -- In each of these examples the args list consists of the terms
+      -- following the '+' op
+      -- so the first arg could be a "ZAG" or something
       -- else, but the second arg looks like it has to be "ZAG", so maybe
-      -- test for #args > 1 and args.2 is "ZAG".
-      -- This test should work so long as axiom doesn't try to evaluate
-      -- the second half of the "and" when the first half is false.
+      -- test for #args > 1 and args.2 contains "ZAG".
+      -- Note that since the resulting MathML <mfrac>s are nested we need
+      -- to handle the whole continued fraction at once, i.e. we can't
+      -- just look for, e.g., {{ZAG}{1}{6}}
       (#args > 1) and (position("ZAG",stringify first rest args,1) > 0) =>
 	   tmpS : S := stringify first args
 	   position("ZAG",tmpS,1) > 0 => formatZag(args)
@@ -1224,12 +1253,18 @@ have to be switched by swapping names.
       s
 
     formatZag(args : L E) : S ==
-    -- {{ZAG}{1}{7}}
+    -- args will be a list of things like this {{ZAG}{1}{7}}, the ZAG
+    -- must be there, the '1' and '7' could conceivably be more complex
+    -- expressions
       tmpZag : L E := first args pretend L E
+      -- may want to test that tmpZag contains 'ZAG'
       #args > 1 => "<mfrac>"formatMml(first rest tmpZag,minPrec)"<mrow><mn>"formatMml(first rest rest tmpZag,minPrec)"</mn><mo>+</mo>"formatZag(rest args)"</mrow></mfrac>"
       -- EQUAL(tmpZag, "...")$Lisp => "<mo>&#x2026;</mo>"
-      (first args = "...":: E)@Boolean => "<mo>&#x2026;</mo>"
-      error "formatZag: Unexpected kind of ZAG"
+      (first args = "..."::E)@Boolean => "<mo>&#x2026;</mo>"
+      position("ZAG",stringify first args,1) > 0 =>
+          "<mfrac>"formatMml(first rest tmpZag,minPrec)formatMml(first rest rest tmpZag,minPrec)"</mfrac>"      
+      "<mtext>formatZag: Unexpected kind of ZAG</mtext>"
+
       
     formatZag1(args : L E) : S ==
     -- make alternative ZAG format without diminishing fonts, maybe
@@ -1285,12 +1320,23 @@ have to be switched by swapping names.
 	  -- where it arises.  Removed 2007-02-14
           concat(concat("<mtext>",str),"</mtext>")
 	-- if we get to here does that mean it's a variable?
+	-- test for something like #\A and strip off #\
+	str.1 = char "#" and str.2 = char "\" =>
+	    u : US := segment(3,len)$US
+	    concat ["<mi>",str.u,"</mi>"]
         concat ["<mi>",str,"</mi>"]
       l : L E := (expr pretend L E)
       null l => blank
       op : S := stringify first l
       args : L E := rest l
       nargs : I := #args
+      -- need to test here in case first l is SUPERSUB case and then
+      -- pass first l and args to formatSuperSub.
+      position("SUPERSUB",op,1) > 0 =>
+        formatSuperSub(first l,args,minPrec)
+      -- now test for SUB
+      position("SUB",op,1) > 0 =>
+        formatSub1(first l,args,minPrec)
 
       -- special cases
       member?(op, specialOps) => formatSpecial(op,args,prec)
@@ -1310,13 +1356,6 @@ have to be switched by swapping names.
       -- nary case
       member?(op,naryNGOps) => formatNaryNoGroup(op,args, prec)
       member?(op,naryOps) => formatNary(op,args, prec)
-      -- need to test here in case first l is SUPERSUB case and then
-      -- pass first l and args to formatSuperSub.
-      position("SUPERSUB",op,1) > 0 =>
-        formatSuperSub(first l,args,minPrec)
-      -- now test for SUB
-      position("SUB",op,1) > 0 =>
-        formatSub(first l,args,minPrec)
 
       op := formatMml(first l,minPrec)
       formatFunction(op,args,prec)



\start
Date: Mon, 17 Dec 2007 09:56:48 -0800
From: Arthur Ralfs
To: list
Subject: mathml formatZag error patch

This just delivers a more appropriate error and makes a couple of small
documentation changes.

\start
Date: Mon, 17 Dec 2007 11:46:28 -0800
From: Arthur Ralfs
To: list
Subject: missing patch for formatZAG error


Oops<br>

----ecc53d20dbab3fc3253e
 filename=mathml.spad.pamphlet.ZAGerror.patch

LS0tIG1hdGhtbC5zcGFkLnBhbXBobGV0CTIwMDctMTItMTYgMDg6MTY6MjguMDAwMDAwMDAw
IC0wODAwCisrKyBtYXRobWwuc3BhZC5wYW1waGxldC5uZXcJMjAwNy0xMi0xNyAwOToyMDoz
Ni4wMDAwMDAwMDAgLTA4MDAKQEAgLTEwMCw3ICsxMDAsMTQgQEAKIDEyLiB5OlVUUyhGTE9B
VCwneiwwKSA6PSBleHAoeikKIAogMTMuIGEuIGMgOj0gY29udGludWVkRnJhY3Rpb24oMzE0
MTU5LzEwMDAwMCkKLSAgICBiLiBjIDo9IGNvbnRpbnVlZEZyYWN0aW9uKDMxNDE1OS8xMDAw
MDApCisgICAgYi4gYyA6PSBjb250aW51ZWRGcmFjdGlvbigxNDE1OS8xMDAwMDApCisgICAg
Yy4gYyA6PSBjb250aW51ZWRGcmFjdGlvbigzLHJlcGVhdGluZyBbMV0sIHJlcGVhdGluZyBb
Myw2XSkKKworMTQuIEYgOj0gb3BlcmF0b3IgRgorICAgIHggOj0gb3BlcmF0b3IgeAorICAg
IHkgOj0gb3BlcmF0b3IgeQorICAgIGEgOj0gRih4IHoseSB6LHoqKjIpICsgeCB5KHorMSkK
KyAgICBEKGEseikKIAogVGhlIFxzcGFkdHlwZXtUZXhGb3JtYXR9IGRvbWFpbiBoYXMgdGhl
IGNhcGFiaWxpdHkgdG8gZm9ybWF0IGFuIG9iamVjdCB3aXRoCiBzdWJzY3JpcHRzLCBzdXBl
cnNjcmlwdHMsIHByZXN1YnNjcmlwdHMgYW5kIHByZXN1cGVyc2NyaXB0cyBob3dldmVyCkBA
IC0xMjU4LDkgKzEyNjUsMTAgQEAKICAgICAgIC0tIG1heSB3YW50IHRvIHRlc3QgdGhhdCB0
bXBaYWcgY29udGFpbnMgJ1pBRycKICAgICAgICNhcmdzID4gMSA9PiAiPG1mcmFjPiJmb3Jt
YXRNbWwoZmlyc3QgcmVzdCB0bXBaYWcsbWluUHJlYykiPG1yb3c+PG1uPiJmb3JtYXRNbWwo
Zmlyc3QgcmVzdCByZXN0IHRtcFphZyxtaW5QcmVjKSI8L21uPjxtbz4rPC9tbz4iZm9ybWF0
WmFnKHJlc3QgYXJncykiPC9tcm93PjwvbWZyYWM+IgogICAgICAgKGZpcnN0IGFyZ3MgPSAi
Li4uIjo6RSlAQm9vbGVhbiA9PiAiPG1vPiYjeDIwMjY7PC9tbz4iCi0gICAgICBwb3NpdGlv
bigiWkFHIixzdHJpbmdpZnkgZmlyc3QgYXJncywxKSA+IDAgPT4KKyAgICAgIG9wOlMgOj0g
c3RyaW5naWZ5IGZpcnN0IGFyZ3MKKyAgICAgIHBvc2l0aW9uKCJaQUciLG9wLDEpID4gMCA9
PgogICAgICAgICAgICI8bWZyYWM+ImZvcm1hdE1tbChmaXJzdCByZXN0IHRtcFphZyxtaW5Q
cmVjKWZvcm1hdE1tbChmaXJzdCByZXN0IHJlc3QgdG1wWmFnLG1pblByZWMpIjwvbWZyYWM+
IiAgICAgIAotICAgICAgIjxtdGV4dD5mb3JtYXRaYWc6IFVuZXhwZWN0ZWQga2luZCBvZiBa
QUc8L210ZXh0PiIKKyAgICAgIGVycm9yICJmb3JtYXRaYWc6IExhc3QgYXJndW1lbnQgaW4g
WkFHIGNvbnN0cnVjdCBoYXMgdW5rbm93biBvcGVyYXRvcjogIm9wCiAKICAgICBmb3JtYXRa
YWcxKGFyZ3MgOiBMIEUpIDogUyA9PQogICAgIC0tIG1ha2UgYWx0ZXJuYXRpdmUgWkFHIGZv
cm1hdCB3aXRob3V0IGRpbWluaXNoaW5nIGZvbnRzLCBtYXliZQo=

----ecc53d20dbab3fc3253e--

\start
Date: 17 Dec 2007 22:00:48 +0100
From: Martin Rubey
To: list
Subject: Re: Installation directory

Waldek Hebisch writes:

> The following patch changes installation directory from 
> $PREFIX/lib/axiom to $PREFIX/lib/fricas and the name of installed
> binary from $PREFIX/bin/axiom to $PREFIX/bin/fricas.
> 
> I think that we should do this change to avoid conflicts with
> other Axiom flavours.

Waldek, I think this is not a very good idea.  I think that those who really
want to install several flavours of axiom in parallel, will find a way to do
that.

But for all the others, it just means that incompatibility is increased.  For
example, axiom.el would have to be customized for no good reason.

Please do not commit this change.

\start
Date: Mon, 17 Dec 2007 17:25:28 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: Installation directory

>Waldek Hebisch writes:
>
>> The following patch changes installation directory from 
>> $PREFIX/lib/axiom to $PREFIX/lib/fricas and the name of installed
>> binary from $PREFIX/bin/axiom to $PREFIX/bin/fricas.
>> 
>> I think that we should do this change to avoid conflicts with
>> other Axiom flavours.

Martin writes:
>
>Waldek, I think this is not a very good idea.  I think that those who really
>want to install several flavours of axiom in parallel, will find a way to do
>that.
>
>But for all the others, it just means that incompatibility is increased.  For
>example, axiom.el would have to be customized for no good reason.
>
>Please do not commit this change.


I, of course, take the opposite position. Fricas is clearly making a
name for itself (e.g. with Sage) and does not need to step on Axiom.

It should be possible to have both systems installed, ala CMUCL and SBCL,
even though they do the same things; if only for the reason that it
would make it possible to compare results of system changes. Why should
the user suddenly lose all of their Fricas work (or Axiom work) when
they install the other system?

It would be trivial to ship a fricas.el that got installed properly.
Maintaining a single symbol in a non-algebra file is hardly a reason
to maintain a collision between the systems.

The name issue has already caused problems. William Stein of SAGE
believe he has Axiom installed when he actually has Fricas. So when
I ask him to try things they don't work because my instructions are
for Axiom, not Fricas.

Waldek has been excellent about pushing the name change everywhere
and this is one of the final external stages.

We've been working cooperatively (eg, Waldek has sent Axiom patches,
I've sent )help files to Fricas) and I expect that to continue.

As a mathematician I'd expect that you understand that different
things should have different names. 

\start
Date: 17 Dec 2007 22:44:26 +0100
From: Martin Rubey
To: Tim Daly
Subject: re: Installation directory

Tim Daly writes:

> It should be possible to have both systems installed, ala CMUCL and SBCL,
> even though they do the same things; if only for the reason that it would
> make it possible to compare results of system changes. Why should the user
> suddenly lose all of their Fricas work (or Axiom work) when they install the
> other system?

But they wouldn't!  Why would you think that any of your work was lost when you
install axiom after having installed friCAS?  The only difference is, if the
names wouldn't change, they wouldn't need to adjust paths they currently don't
even know about.

> It would be trivial to ship a fricas.el that got installed properly.
> Maintaining a single symbol in a non-algebra file is hardly a reason to
> maintain a collision between the systems.

If it were a single symbol, ok.  But it's not.  What about the wikimedia plugin
for axiom?  What about the TeXmacs interface?  Do you really want to maintain

axiom.el, fricas.el, openaxiom.el,
axiom.tm, fricas.tm, openaxiom.tm
axiom.php, fricas.php, openaxiom.php?

> We've been working cooperatively (eg, Waldek has sent Axiom patches, I've
> sent )help files to Fricas) and I expect that to continue.

It seems to me that such a change would rather be a hindrance to cooperation
than making cooperation easier.  It's quite the same with IssueTracker.

Really, if this mess stays the same, it will drive me mad.  Already I have to
include 3 email lists if I want to say something all axioms should care about,
which is the case most of the time, since I'm working only on the algebra
level.  Cooperation in this manner is for me such a nuisance, that I'd rather
stop it.

> As a mathematician I'd expect that you understand that different things
> should have different names.

In fact, as a mathematician, I often use the same symbol for different things,
and let context decide.  I do so as an axiom programmer, too.  For example,
"eval" can refer to roughly 38 operations, some even having different number of
arguments.

I cannot understand why you want different names for the same thing!

\start
Date: Mon, 17 Dec 2007 14:02:33 -0800 (PST)
From: Cliff Yapp
To: Martin Rubey, Tim Daly
Subject: re: Installation directory

--- Martin Rubey wrote:

> But they wouldn't!  Why would you think that any of your work was
> lost when you install axiom after having installed friCAS?

I think the concern here is accidentally overwriting an installation of
Axiom with FriCAS, for example, or having the wrong library used due to
path confusion.  In my opinion that concern is valid.
 
> Really, if this mess stays the same, it will drive me mad.  Already I
> have to include 3 email lists if I want to say something all axioms
> should care about, which is the case most of the time, since I'm 
> working only on the algebra level.  Cooperation in this manner is
> for me such a nuisance, that I'd rather stop it.

Aren't most of the key players on all the lists anyway?  Surely it is
reasonable to pick your "favorite" platform and work with that, and
people will track the various lists as they choose?

> I cannot understand why you want different names for the same thing!

If they were the same thing we wouldn't need the forks.  I expect the
systems will begin to drift further apart with time, and maintaining
common files for all of them will be increasingly difficult. 
Mathematica and Maple are different despite attempting to do the same
job - I expect FriCAS, Axiom and OpenAxiom will all eventually look
different from each other.  Aldor, for example - unless Tim has plans
I'm not aware of Axiom itself won't be moving in the direction of using
Aldor.  Pursuing branches at the Algebra language level will quickly
lead to very different systems.  It looks similar right now because we
are all still close to the origin - personally I doubt this will last
indefinitely.  Macsyma is very different from Maxima, for example.

\start
Date: Mon, 17 Dec 2007 18:14:20 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: Installation directory

>But they wouldn't!  Why would you think that any of your work was
>lost when you install axiom after having installed friCAS?  The only
>difference is, if the names wouldn't change, they wouldn't need to
>adjust paths they currently don't even know about.

Oh, but they DO. Try to do parallel installations.
Being able to run Fricas and Axiom in parallel would be great.




>Really, if this mess stays the same, it will drive me mad.  Already I
>have to include 3 email lists if I want to say something all axioms
>should care about, which is the case most of the time, since I'm
>working only on the algebra level.  Cooperation in this manner is for
>me such a nuisance, that I'd rather stop it.

I try hard to add the critical patches from OpenAxiom and Fricas
and I run into this all the time. I'd estimate that reverse-engineering
critical patches takes about 25% of my time. Patches rarely have
test cases that illustrate what was broken or fixed so I have to 
guess.

I've tried to minimize this pain "outward" by documenting how to 
install the new )help facility and how to install the regression 
test facility. When the new )browse facility gets more stable I'll
also document how to port it to the other systems. In addition my
patches give rather-longer explanations of what they do so it is
easier to understand if they might be of interest.

Unfortunately the )help, )browse, regression testing, and the coming
)example facilities all are closely related to literate programming
which will make them hard to port to other systems.

> I cannot understand why you want different names for the same thing!

Sigh. See the mailing list archives. 

\start
Date: 17 Dec 2007 23:14:51 +0100
From: Martin Rubey
To: Cliff Yapp
Subject: re: Installation directory

Cliff Yapp writes:

> I think the concern here is accidentally overwriting an installation of Axiom
> with FriCAS, for example, or having the wrong library used due to path
> confusion.  In my opinion that concern is valid.

So, how much work is it to reinstall axiom or friCAS, or open-axiom?  1 minute?
2 minutes?

> Pursuing branches at the Algebra language level will quickly lead to very
> different systems.  It looks similar right now because we are all still close
> to the origin - personally I doubt this will last indefinitely.

I believe, the question is rather: do we want to drift apart at the user level?
I don't.  If the algebra starts to diverge, do you think the number of
contributers will triple?  As far as I can see, (i.e., among the mathematicians
I know of) the number of axiom users has rather decreased since the forks,
although it was increasing before.

I believe that forking the fundamental workings of axiom (i.e., the algebra,
the compiler) in an essentially incompatible way would be a disaster for axiom.
In this case, axiom would be lucky if only one fork would survive.  Otherwise,
we will have three nearly dead CAS.

> Aren't most of the key players on all the lists anyway?

At least, it doesn't seem that the "key players" read all the lists.  Otherwise
Tim would have known that SAGE runs Waldek's branch, there was a lengthy
discussion of the reasons for that.

\start
Date: Mon, 17 Dec 2007 18:20:26 -0500
From: Tim Daly
To: Cliff Yapp
Subject: re: Installation directory

...[snip]...
>Aldor, for example - unless Tim has plans I'm not aware of Axiom
>itself won't be moving in the direction of using Aldor.

Sigh. I replied to Bill's email a while ago that Axiom will have
aldor available. I explained at that time that Bill was making
a statement about Axiom that was not true. Aldor will be available
in Axiom when I get it working and documentated in a literate way.

In fact, if you look at the posted patches on the
Axiom mailing list you'll see one from 12/16 titled:

20071216.01.tpd.patch 20071216.02.tpd.patch (7045)

I was patching bug 7045 and I forgot I was in the Aldor branch
of the git directory rather than the mathml branch so I ended
up posting the wrong Makefile.pamphlet. I'm actively working
an aldor git branch. It's just not ready for silver yet.

\start
Date: 17 Dec 2007 23:20:10 +0100
From: Martin Rubey
To: Tim Daly
Subject: re: Installation directory

Tim Daly writes:

> Oh, but they DO. Try to do parallel installations.
> Being able to run Fricas and Axiom in parallel would be great.

I cannot see any problem running friCAS and axiom in parallel.  I do it, for
example (because I couldn't get Aldor to run with friCAS yet), and I wouldn't
even know what could go wrong!?

But please answer my question:

> Do you really want to maintain
> 
> axiom.el, fricas.el, openaxiom.el,
> axiom.tm, fricas.tm, openaxiom.tm
> axiom.php, fricas.php, openaxiom.php?

(I think ALLPROSE is another candidate, but I do not know for sure)

\start
Date: Mon, 17 Dec 2007 18:46:50 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: Installation directory

>But please answer my question:
>
>> Do you really want to maintain
>> 
>> axiom.el, fricas.el, openaxiom.el,
>> axiom.tm, fricas.tm, openaxiom.tm
>> axiom.php, fricas.php, openaxiom.php?
>

Since you posted a literate file for axiom.el I have it in the queue
to package it with Axiom. I have to set up and test some install
instructions. I expect that fricas.el would end up being packaged
with Fricas. There is no reason for Waldek to ship axiom.el.

There are no literate forms of axiom.tm and axiom.php that I've
seen (which doesn't mean they don't exist). Until somebody writes
some documentation so the next generation can maintain and expand
them they are not in the queue.

If literate programming were used these could all be maintained from
a single file.

Why isn't there an "algebra.el"?





>(I think ALLPROSE is another candidate, but I do not know for sure)

ALLPROSE is a beautiful piece of work but somebody is going to have
to package it so it fits into the system. It is large, I didn't write
it, and I don't understand it which makes it hard for me to package it.

I had enough trouble trying to make a literate document for the 
Pfaffian code and until I write the document with some test cases
for the regression machinery and example machinery it is still in the 
queue.

\start
Date: Mon, 17 Dec 2007 15:18:51 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: re: Installation directory

--- Tim Daly wrote:

> ...[snip]...
> >Aldor, for example - unless Tim has plans I'm not aware of Axiom
> >itself won't be moving in the direction of using Aldor.
> 
> Sigh. I replied to Bill's email a while ago that Axiom will have
> aldor available. I explained at that time that Bill was making
> a statement about Axiom that was not true. Aldor will be available
> in Axiom when I get it working and documentated in a literate way.

Ah, my bad.

> In fact, if you look at the posted patches on the
> Axiom mailing list you'll see one from 12/16 titled:
> 
> 20071216.01.tpd.patch 20071216.02.tpd.patch (7045)
> 
> I was patching bug 7045 and I forgot I was in the Aldor branch
> of the git directory rather than the mathml branch so I ended
> up posting the wrong Makefile.pamphlet. I'm actively working
> an aldor git branch. It's just not ready for silver yet.

OK.  Sorry Tim - not paying close enough attention.

\start
Date: Mon, 17 Dec 2007 18:21:42 -0600 (CST)
From: Gabriel Dos Reis
To: list
Subject: Re: re: Installation directory

On Mon, 17 Dec 2007, C Y wrote:

| --- Martin Rubey wrote:
| 
| > But they wouldn't!  Why would you think that any of your work was
| > lost when you install axiom after having installed friCAS?
| 
| I think the concern here is accidentally overwriting an installation of
| Axiom with FriCAS, for example, or having the wrong library used due to
| path confusion.  

People familiar with Axiom, FriCAS, and OpenAxiom know that they have
different installation procedure (even before Waldek's patch).  FriCAS had
the same procude as Axiom.build-improvements.  OpenAxiom later changed
the installation procedure.  Waldek's patch is was OpenAxiom used to
do in the earliest day (e.g. OpenAxiom-1.0.0).  

It seems to me that we have more FUD that concrete data that we can
subject to rational analysis.

\start
Date: Mon, 17 Dec 2007 18:24:46 -0600 (CST)
From: Gabriel Dos Reis
To: list
Subject: Installation directory

On Mon, 17 Dec 2007, Martin Rubey wrote:

| 
| Tim Daly writes:
| 
| > Oh, but they DO. Try to do parallel installations.
| > Being able to run Fricas and Axiom in parallel would be great.

With OpenAxiom and FriCAS, one can specify their own installation
directories at configure time.

\start
Date: 17 Dec 2007 18:39:08 -0600
From: Gabriel Dos Reis
To: Tim Daly
Subject: re: Installation directory

Tim Daly writes:

[...]

| The name issue has already caused problems. William Stein of SAGE
| believe he has Axiom installed when he actually has Fricas.

Of course, both you and me cannot speak for William Stein, but there
is strong evidence that he knows he has FriCAS.

\start
Date: Mon, 17 Dec 2007 20:52:50 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: Installation directory

>It seems to me that we have more FUD that concrete data that we can
>subject to rational analysis.

Sigh. So you don't read the mailing lists. However, you'll remember
that Axiom was clobbered by the newer install on the windows platform.
At minimum, since they both try to use the AXIOM shell variable,
as opposed to a more rational OPENAXIOM and FRICAS shell variable
they certainly collide.

\start
Date: Mon, 17 Dec 2007 21:01:12 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: re: Installation directory

>| The name issue has already caused problems. William Stein of SAGE
>| believe he has Axiom installed when he actually has Fricas.
>
>Of course, both you and me cannot speak for William Stein, but there
>is strong evidence that he knows he has FriCAS.

Actually the Sage .spkg was named AxiomForSage or some such.
 
After William and I exchanged emails I believe he renamed the .spkg 
to use FricasForSage but I've been too busy to check. From reading
the list it appears that Fricas is built directly from the lisp
but this is just Axiom's "int" directory's whole purpose in life.

Since I intend to promote the new browser-based hyperdoc to
the Sage audience it is important to distinguish the systems.
Unless OpenAxiom and Fricas implement the )browse machinery 
there will be confusion.

\start
Date: Mon, 17 Dec 2007 19:11:15 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: Installation directory

On Mon, 17 Dec 2007, root wrote:

| >It seems to me that we have more FUD that concrete data that we can
| >subject to rational analysis.
| 
| Sigh. So you don't read the mailing lists. However, you'll remember
| that Axiom was clobbered by the newer install on the windows platform.

You reported that you fumbled your installation.  That is a different story.

\start
Date: Mon, 17 Dec 2007 19:13:31 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: re: Installation directory

On Mon, 17 Dec 2007, root wrote:

| >| The name issue has already caused problems. William Stein of SAGE
| >| believe he has Axiom installed when he actually has Fricas.
| >
| >Of course, both you and me cannot speak for William Stein, but there
| >is strong evidence that he knows he has FriCAS.
| 
| Actually the Sage .spkg was named AxiomForSage or some such.

That is not what you wrote above.  William Stein has been following
FriCAS development for almost its beginning.  He knows the difference.

[...]

| Unless OpenAxiom and Fricas implement the )browse machinery 
| there will be confusion.

Are you going to make a law that prevents them from implementing a
)browse command?

\start
Date: Mon, 17 Dec 2007 22:06:03 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: Installation directory

>| >It seems to me that we have more FUD that concrete data that we can
>| >subject to rational analysis.
>| 
>| Sigh. So you don't read the mailing lists. However, you'll remember
>| that Axiom was clobbered by the newer install on the windows platform.
>
>You reported that you fumbled your installation.  That is a different story.

So it's not FUD.

The problem is that they both use the same shell variable, command
name, initialization filename and path variable name. This is 
unnecessary, confusing, and makes dual installations impossible.
CMUCL and SBCL, which differ because SBCL uses autoconf, do not
interfere with each other in any way. 

\start
Date: Mon, 17 Dec 2007 22:15:32 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: re: Installation directory

You win. I give up. I'm tired of this pointless debate.

There is no cure for the active denial of the obvious
and a simple, global rename is painfully obvious.

I only made one request when you forked Axiom. I asked
that, as a professional courtesy, you please use your
own project name. 

Waldek seems to "get it" and has been actively migrating
in that direction.

When the gentlemen and scholar within you decide to do
the right thing we'll never have to raise this issue again.

\start
Date: Mon, 17 Dec 2007 20:20:23 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: Installation directory

On Mon, 17 Dec 2007, root wrote:

| >| >It seems to me that we have more FUD that concrete data that we can
| >| >subject to rational analysis.
| >| 
| >| Sigh. So you don't read the mailing lists. However, you'll remember
| >| that Axiom was clobbered by the newer install on the windows platform.
| >
| >You reported that you fumbled your installation.  That is a different story.
| 
| So it's not FUD.

In the specific case we are talking about, yes.  Confer the discussion
we had on September 30, 2007.

| The problem is that they both use the same shell variable, command
| name, initialization filename and path variable name.

No.  

When I install GNU coreutils on my Solaris box, I don't confuse
GNU with Sun.  I install them in different directory.  And Sun or AT&T
don't get to say how the `ls' command must be named by GNU on either
Solaris boxes or Linux boxes.

OpenAxiom installs all its algebra and sub-components in different
directory.   OpenAxiom does not depend on an external setting of the
AXIOM variable -- this is the nth time I'm repeating it to you.

| CMUCL and SBCL, which differ because SBCL uses autoconf, do not
| interfere with each other in any way. 

Install OpenAxiom in a directory different from Axiom.  You can do it,
because OpenAxiom -- unlike Axiom -- lets you specify the destination
install directory at configuration time.  
As a matter of fact, I have 6 copies of Axiom derivatives running on
the box I'm writing from.

Otherwise, the rest is a bug in Axiom -- you know how to fix it.

\start
Date: Mon, 17 Dec 2007 20:22:41 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: re: Installation directory

On Mon, 17 Dec 2007, root wrote:

| I only made one request when you forked Axiom. I asked
| that, as a professional courtesy, you please use your
| own project name. 

It is called OpenAxiom.  When you starts OpenAxiom-1.1.0-xxx
it says

             OpenAxiom: The Open Scientific Computation Platform 
                     Version: OpenAxiom 1.1.0-2007-12-15
              Built on Saturday December 15, 2007 at 16:54:27 
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave OpenAxiom and return to shell.
-----------------------------------------------------------------------------

\start
Date: Mon, 17 Dec 2007 21:43:06 -0600
From: Tim Daly
To: Gabriel Dos Reis
Subject: willful denial

<http://open-axiom.svn.sourceforge.net/viewwc/open-axiom/trunk/src/scripts/axiom.in?view=markup>

\start
Date: Mon, 17 Dec 2007 22:05:48 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: willful denial

On Mon, 17 Dec 2007, Tim Daly wrote:

| <http://open-axiom.svn.sourceforge.net/viewwc/open-axiom/trunk/src/scripts/axiom.in?view=markup>
| 
| sigh.
| Tim

It's sad to realize that you cannot read what you see, yet you're
willing to lecture people on how they should do their job.


      ## Where The OpenAxiom system resides
   27 prefix=@prefix@
   28 exec_prefix=@exec_prefix@
   29 AXIOM=@open_axiom_installdir@
   30 export AXIOM
   31 
   32 ## We adjust the value of PATH here because, currently, some OpenAxiom
   33 ## programs are called from the executing shell, and relying on the
   34 ## fact that the executables are reachable from the PATH.
   35 PATH=$AXIOM/bin:$PATH


As you can see, on line 29, the variable AXIOM is set *internally* to
the script -- therefore it does not depend on *external* setting of
the variable.  Said differently, if you set AXIOM in your shell and
execute the OpenAxiom script `axiom', the value you set in your shell
will be ignored *from within* OpenAxiom.  And the value set by OpenAxiom
does not change anything outside OpenAxiom.

This is at all opposite to Axiom, which requires manual intervention
of users to set the variable before doing anything.

\start
Date: Tue, 18 Dec 2007 01:24:27 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: willful denial

>| <http://open-axiom.svn.sourceforge.net/viewwc/open-axiom/trunk/src/scripts/axiom.in?view=markup>
>| 
>| sigh.
>| Tim
>
>It's sad to realize that you cannot read what you see, yet you're
>willing to lecture people on how they should do their job.

I'm asking, not lecturing.

>
>
>      ## Where The OpenAxiom system resides
>   27 prefix=@prefix@
>   28 exec_prefix=@exec_prefix@
>   29 AXIOM=@open_axiom_installdir@
>   30 export AXIOM
>   31 
>   32 ## We adjust the value of PATH here because, currently, some OpenAxiom
>   33 ## programs are called from the executing shell, and relying on the
>   34 ## fact that the executables are reachable from the PATH.
>   35 PATH=$AXIOM/bin:$PATH
>
>
>As you can see, on line 29, the variable AXIOM is set *internally* to
>the script -- therefore it does not depend on *external* setting of
>the variable.  Said differently, if you set AXIOM in your shell and
>execute the OpenAxiom script `axiom', the value you set in your shell
>will be ignored *from within* OpenAxiom.  And the value set by OpenAxiom
>does not change anything outside OpenAxiom.
>
>This is at all opposite to Axiom, which requires manual intervention
>of users to set the variable before doing anything.

Did you deliberately miss the point? 
This is exactly the definition of willful denial.

The POINT is.... what command do you use to start OpenAxiom?

\start
Date: Mon, 17 Dec 2007 23:38:28 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: willful denial

On Tue, 18 Dec 2007, root wrote:

| Did you deliberately miss the point? 

Not at all.

| The POINT is.... what command do you use to start OpenAxiom?

It is called `axiom', in case you missed, I'm going to repeat it
again:

  When I install GNU coreutils on my Solaris box, I don't confuse
  GNU with Sun.  I install them in different directory.  And Sun or AT&T
  don't get to say how the `ls' command must be named by GNU on either
  Solaris boxes or Linux boxes.

There is no willful denial there.

\start
Date: Mon, 17 Dec 2007 21:50:23 -0800
From: Arthur Ralfs
To: list
Subject: mathml hex(10) #2 patch

Tim, Waldek,

This patch undoes the previous hex(10) patch and implements Waldek's
solution.&nbsp; I've also included the mathObject2String function translated to
lisp for easy testing.&nbsp; I tested it with the test cases in the pamphlet and it
works.

Arthur

----e7754c719d391b817401
 filename=mathml.spad.pamphlet.hex10.2.patch

LS0tIG1hdGhtbC5zcGFkLnBhbXBobGV0CTIwMDctMTItMTcgMDk6MjA6MzYuMDAwMDAwMDAw
IC0wODAwCisrKyBtYXRobWwuc3BhZC5wYW1waGxldC5uZXcJMjAwNy0xMi0xNyAyMToyMzo0
OC4wMDAwMDAwMDAgLTA4MDAKQEAgLTc4OSw3ICs3ODksNyBAQAogCiAKIAotICAgIHN0cmlu
Z2lmeSBleHByID09IChvYmplY3QyU3RyaW5nJExpc3AgZXhwcilAUworICAgIHN0cmluZ2lm
eSBleHByID09IChtYXRoT2JqZWN0MlN0cmluZyRMaXNwIGV4cHIpQFMKIAogCiAKQEAgLTEz
MjYsMTAgKzEzMjYsNiBAQAogCSAgLS0gd2hlcmUgaXQgYXJpc2VzLiAgUmVtb3ZlZCAyMDA3
LTAyLTE0CiAgICAgICAgICAgY29uY2F0KGNvbmNhdCgiPG10ZXh0PiIsc3RyKSwiPC9tdGV4
dD4iKQogCS0tIGlmIHdlIGdldCB0byBoZXJlIGRvZXMgdGhhdCBtZWFuIGl0J3MgYSB2YXJp
YWJsZT8KLQktLSB0ZXN0IGZvciBzb21ldGhpbmcgbGlrZSAjXEEgYW5kIHN0cmlwIG9mZiAj
XAotCXN0ci4xID0gY2hhciAiIyIgYW5kIHN0ci4yID0gY2hhciAiXCIgPT4KLQkgICAgdSA6
IFVTIDo9IHNlZ21lbnQoMyxsZW4pJFVTCi0JICAgIGNvbmNhdCBbIjxtaT4iLHN0ci51LCI8
L21pPiJdCiAgICAgICAgIGNvbmNhdCBbIjxtaT4iLHN0ciwiPC9taT4iXQogICAgICAgbCA6
IEwgRSA6PSAoZXhwciBwcmV0ZW5kIEwgRSkKICAgICAgIG51bGwgbCA9PiBibGFuawo=
----e7754c719d391b817401

KERFRlVOIHxtYXRoT2JqZWN0MlN0cmluZ3wgKHx4fCkgKENPTkQgKChDSEFSQUNURVJQIHx4
fCkgKENPRVJDRSAoQ09OUyB8eHwgTklMKSAoUVVPVEUgU1RSSU5HKSkpICgoUVVPVEUgVCkg
KHxvYmplY3QyU3RyaW5nfCB8eHwpKSkpIAo=

----e7754c719d391b817401--

\start
Date: Tue, 18 Dec 2007 02:31:03 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: willful denial

>| Did you deliberately miss the point? 
>
>Not at all.
>
>| The POINT is.... what command do you use to start OpenAxiom?
>
>It is called `axiom', in case you missed, I'm going to repeat it
>again:
>
>  When I install GNU coreutils on my Solaris box, I don't confuse
>  GNU with Sun.  I install them in different directory.  And Sun or AT&T
>  don't get to say how the `ls' command must be named by GNU on either
>  Solaris boxes or Linux boxes.
>
>There is no willful denial there.

When SBCL forked CMUCL they changed the command sbcl.
When EGCS forked GCC they changed the command to egcs.
When ....

There is only one axiom command on the path.



Oh, hell, let me bring it down to a level you MIGHT understand....

As I'd say to a 5 year old...
  Yes, we have another dog but it needs a different name than the first one.
  Why?
  Because when I call the name we need to know which dog we want.

  Got it?

In fact, let me take it down ANOTHER level of intelligence....

  s/Axiom/OpenAxiom/*

  Got it?

If the machine understands it and you don't then the only other
possible explanation is that you've decided to not only walk off
with all of my work, you plan to step on the very command that
starts it, deliberately confusing the user.

Rather unprofessional, don't you think?

\start
Date: Tue, 18 Dec 2007 00:44:32 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: willful denial

On Tue, 18 Dec 2007, root wrote:

| There is only one axiom command on the path.

The OpenAxiom project uses `OpenAxiom' as *its name* and that is what it
advertises in its version numbers, web pages, etc.

The Axiom project cannot dictate how other AXIOM derivatives must name
their files, just like the other AXIOM derivatives do not dictate how
Axiom should name its files. And no, that is no willful denial.  
And it would be unprofessional for any of AXIOM derivatives to dictate
to others how they should name their files.

OpenAxiom can be installed in a directory specified by the user at
configuration time -- and in fact algebra and derivaties are installed
in a directory named after OpenAxiom.  That Axiom does not offer
similar flexibility is, IMO, a bug in Axiom.  The changes are there in
Axiom.build-improvements to pick up -- I made it available to every
AXIOM derivative to use.

\start
Date: Tue, 18 Dec 2007 00:47:19 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: willful denial

On Tue, 18 Dec 2007, root wrote:

| When EGCS forked GCC they changed the command to egcs.

That is utter plain wrong.  The compiler was named gcc -- I was there.

The GCC on a Redhat Linux is different from the GCC on a SUSE Linux,
and different from FSF GCC.  Yet, the commands are all named the same.

\start
Date: Mon, 17 Dec 2007 23:39:11 -1100 (SST)
From: Waldek Hebisch
To: list
Subject: Re: Re: Installation directory

Martin Rubey wrote:
> 
> Waldek Hebisch writes:
> 
> > The following patch changes installation directory from 
> > $PREFIX/lib/axiom to $PREFIX/lib/fricas and the name of installed
> > binary from $PREFIX/bin/axiom to $PREFIX/bin/fricas.
> > 
> > I think that we should do this change to avoid conflicts with
> > other Axiom flavours.
> 
> Waldek, I think this is not a very good idea.  I think that those who really
> want to install several flavours of axiom in parallel, will find a way to do
> that.
> 
> But for all the others, it just means that incompatibility is increased.  For
> example, axiom.el would have to be customized for no good reason.
> 

Later:
> If it were a single symbol, ok.  But it's not.  What about the wikimedia plugin
> for axiom?  What about the TeXmacs interface?  Do you really want to maintain
>
> axiom.el, fricas.el, openaxiom.el,
> axiom.tm, fricas.tm, openaxiom.tm
> axiom.php, fricas.php, openaxiom.php?

Well, there are two changes.  One is installation directory -- currently
Axiom and FriCAS use _different_ subdirectories of $PREFIX/lib/axiom
subdirectory.  Which means that if you want to get somehing from
installation directory you need to find correct path anyway.  OTOH
installing FriCAS from source will wipe out the entire $PREFIX/lib/axiom
tree -- this is not nice if you have something different here.
Also, when installing from binary packages user may want to delete
delete the whole install tree -- keeping names different reduces
confusion here.   More important, having different installations
directories allows easier creation of non-conflictiong binary
packages.

The drawback changeing name of installation directory is that
different FriCAS versions will be found in different places.  It is
a problem, but a few lines of code could do proper patch seach so
there is really no long term problem.  And if we keep current name
we may expect that at least some binary packagers will change it
(for example current name violates Debian policy) -- so changing
name ourself will minimize confuzion.

Concerning name of user visible "binary" command (the axiom script): 
user (and binary packagers) can choose any name for command, in
particular they can copy the script to a different name or use symlinks.
It is hard to second-guess what users will prefer, so we probably
should give them choice -- I will post a modified (compromise) 
patch on FriCAS list.

\start
Date: Tue, 18 Dec 2007 07:56:20 +0100
From: Michael.Abshoff
To: Gabriel Dos Reis
Subject: Re: Installation directory
Cc: William Stein

Gabriel Dos Reis wrote:
> Tim Daly writes:
> 
> [...]
> 
> | The name issue has already caused problems. William Stein of SAGE
> | believe he has Axiom installed when he actually has Fricas.
> 
> Of course, both you and me cannot speak for William Stein, but there
> is strong evidence that he knows he has FriCAS.
> 

Hello,

we are well aware that the former axiom4sage.spkg, now renamed 
fricas-0.3.1.spkg upon Tim's request, contained FriCAS and not Axiom.

\start
Date: Tue, 18 Dec 2007 22:04:06 -0600
From: Tim Daly
To: list
Subject: 20071217.01.acr.patch (7015)

This patch by Arthur and Waldek fixes mathml rendering of hex.

hex(10) ==> A but the mathml rendered it as #\A
hex(10) ==> A and now the mathml renders it as A


=========================================================================
diff --git a/changelog b/changelog
index 6759734..7c7788a 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20071217 acr src/algebra/mathml.spad fix hex(10) mathml rendering (7015)
+20071217 wxh src/interp/http.lisp mathObject2String for hex(10) (7015)
 20071216 acr src/algebra/mathml.spad fix F,3 mathml rendering (7019)
 20071216 tpd Makefile fix mistake of using wrong Makefile for Xpm fix (7045)
 20071216 cys Makefile add -lXpm to loader flags (7045)
diff --git a/src/algebra/mathml.spad.pamphlet b/src/algebra/mathml.spad.pamphlet
index be7cf47..4b9869f 100644
--- a/src/algebra/mathml.spad.pamphlet
+++ b/src/algebra/mathml.spad.pamphlet
@@ -780,11 +780,7 @@ have to be switched by swapping names.
 	  str := postcondition(str)
       str
 
-
-
-    stringify expr == (object2String$Lisp expr)@S
-
-
+    stringify expr == (mathObject2String$Lisp expr)@S
 
     group str ==
       concat ["<mrow>",str,"</mrow>"]
@@ -1320,10 +1316,6 @@ have to be switched by swapping names.
 	  -- where it arises.  Removed 2007-02-14
           concat(concat("<mtext>",str),"</mtext>")
 	-- if we get to here does that mean it's a variable?
-	-- test for something like #\A and strip off #\
-	str.1 = char "#" and str.2 = char "\" =>
-	    u : US := segment(3,len)$US
-	    concat ["<mi>",str.u,"</mi>"]
         concat ["<mi>",str,"</mi>"]
       l : L E := (expr pretend L E)
       null l => blank
diff --git a/src/interp/http.lisp b/src/interp/http.lisp
index 3c217d0..4c8e827 100644
--- a/src/interp/http.lisp
+++ b/src/interp/http.lisp
@@ -44,6 +44,35 @@
 (defun |SiAccept| (s) (si::accept s))
 (defun |SiCopyStream| (q s) (si::copy-stream q s))
 
+;;; mathObject2String is a replacement function for object2String
+;;;
+;;; this function is used in mathml.spad to handle conversion of
+;;; of numbers in mathml for radix expansions. The bug is:
+;;;
+;;;                           _____
+;;;  radix(5/24,39)  ==> 0 . 8 4 34
+;;;
+;;;                            _
+;;;  radix(5/24,40)  ==> 0 . 8 D
+;;;
+;;;                          ____
+;;;  radix(5/24,43)  ==> 0 . 8 41
+;;;
+;;;  radix(35,36)    ==> Z
+;;;
+;;;  radix(36,37)    ==> Error ... index out of range
+;;;
+;;;  radix(10,16)    ==> A
+;;;
+;;;  exprex(%)       ==> "{#\A}"
+;;;
+;;;  exprex shows the preconditioned output form which shows #\A
+
+(defun |mathObject2String| (x)
+ (if (characterp x)
+  (coerce (list x) 'string)
+  (|object2String| x)))
+
 
 ;;; replace-entities is a function that takes a string and 
 ;;; returns a new string that has special html entities replaced.

\start
Date: Tue, 18 Dec 2007 22:21:34 -0600
From: Tim Daly
To: list
Subject: 20071217.02.tpd.patch (7041) (7042)

This patch fixes two failing tests in the regression test suite.

Due to recent changes the gensym numbers have changed. The lodo.spad
and variable.spad regression tests have been changed to ignore lines
which have gensym values. This fixes bugs 7041 and 7042.

========================================================================
diff --git a/changelog b/changelog
index 7c7788a..ca336c0 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20071217 tpd src/algebra/variable.spad ignore regression test gensym (7041)
+20071217 tpd src/algebra/lodo.spad ignore regression test gensym (7042)
 20071217 acr src/algebra/mathml.spad fix hex(10) mathml rendering (7015)
 20071217 wxh src/interp/http.lisp mathObject2String for hex(10) (7015)
 20071216 acr src/algebra/mathml.spad fix F,3 mathml rendering (7019)
diff --git a/src/algebra/lodo.spad.pamphlet b/src/algebra/lodo.spad.pamphlet
index 99f2ad8..0e499d1 100644
--- a/src/algebra/lodo.spad.pamphlet
+++ b/src/algebra/lodo.spad.pamphlet
@@ -270,7 +270,7 @@ leq
 --R      Polynomial Integer 
 --R   Compiling body of rule leq to compute value of type List List 
 --R      Equation Fraction Polynomial Integer 
---R   Compiling function G3349 with type Integer -> Boolean 
+--I   Compiling function G3349 with type Integer -> Boolean 
 --R
 --R   (12)
 --R                           2                                3        2
diff --git a/src/algebra/variable.spad.pamphlet b/src/algebra/variable.spad.pamphlet
index 994aa3b..e9e5f02 100644
--- a/src/algebra/variable.spad.pamphlet
+++ b/src/algebra/variable.spad.pamphlet
@@ -43,8 +43,8 @@ size()$Z
 --S 4
 lv:=[index(i::PI)$Z for i in 1..size()$Z]
 --R 
---R   Compiling function G1408 with type Integer -> Boolean 
---R   Compiling function G1572 with type NonNegativeInteger -> Boolean 
+--I   Compiling function G1408 with type Integer -> Boolean 
+--I   Compiling function G1572 with type NonNegativeInteger -> Boolean 
 --R
 --R   (4)  [x,a,z]
 --R                                       Type: List OrderedVariableList [x,a,z]

\start
Date: Wed, 19 Dec 2007 05:23:47 -0800
From: Arthur Ralfs
To: list
Subject: axserver patch for lastType

Tim,

This patch is for axserver.spad.pamphlet to fix the lastType function which
wasn't doing the right thing.

----232d739d98ef532b1f91

LS0tIGF4c2VydmVyLnNwYWQucGFtcGhsZXQJMjAwNy0xMi0xOSAwNTowNDozOC4wMDAwMDAw
MDAgLTA4MDAKKysrIGF4c2VydmVyLnNwYWQucGFtcGhsZXQubmV3CTIwMDctMTItMTkgMDU6
MDY6MjMuMDAwMDAwMDAwIC0wODAwCkBAIC0xNDksMTMgKzE0OSw0NSBAQAogCiAKICAgIGxh
c3RUeXBlKCk6U3RyaW5nID09Ci0tLSAgVGhlIGxhc3QgaGlzdG9yeSBlbnRyeSBpcyB0aGUg
Zmlyc3QgaXRlbSBpbiB0aGUgJGludGVybmFsSGlzdG9yeVRhYmxlIGxpc3Qgc28KLS0tICBj
YXIoXyRpbnRlcm5hbEhpc3RvcnlUYWJsZSRMaXNwKSBzZWxlY3RzIGl0LiAgSGVyZSdzIGFu
IGV4YW1wbGU6Ci0tLSAgKDMgKHgreSkqKjMgKCUgKHZhbHVlIChQb2x5bm9taWFsIChJbnRl
Z2VyKSkgV1JBUFBFRCAxIHkgKDMgMCAuIDEpICgyIDEgeCAoMSAwIC4gMykpICgxIDEgeCAo
MiAwIC4gMykpICgwIDEgeCAoMyAwIC4gMSkpKSkpCi0tLSAgVGhpcyBjb3JyZXNwb25kcyB0
byB0aGUgaW5wdXQgIih4K3kpKiozIiBiZWluZyBpc3N1ZWQgYXMgdGhlIHRoaXJkIGNvbW1h
bmQgYWZ0ZXIKLS0tICBzdGFydGluZyBheGlvbS4gIFRoZSBmb2xsb3dpbmcgbGluZSBzZWxl
Y3RzIHRoZSB0eXBlIGluZm9ybWF0aW9uLgotICAgICAgIHN0cmluZyBjYXIoY2RyKGNhcihj
ZHIoY2FyKGNkcihjZHIoY2FyKF8kaW50ZXJuYWxIaXN0b3J5VGFibGUkTGlzcCkkTGlzcCkk
TGlzcCkkTGlzcCkkTGlzcCkkTGlzcCkkTGlzcCkkTGlzcCkkTGlzcAotCisgICAtLSB0byBl
eGFtaW5lIHRoZSAkaW50ZXJuYWxIaXN0b3J5VGFibGUgdW5jb21tZW50IHRoZSBmb2xsb3dp
bmcgbGluZXMKKyAgIC0tICBXcml0ZUxpbmUkTGlzcCAibGFzdFR5cGUgYmVnaW4iCisgICAt
LSAgV3JpdGVMaW5lJExpc3Agc3RyaW5nIF8kaW50ZXJuYWxIaXN0b3J5VGFibGUkTGlzcCAK
KyAgIC0tIG5lZWQgdG8gcGljayBvdXQgZmlyc3QgbWVtYmVyIG9mIGludGVybmFsSGlzdG9y
eVRhYmxlIGFuZCB0aGVuIHBpY2sgb3V0CisgICAtLSB0aGUgZWxlbWVudCB3aXRoICUgYXMg
Zmlyc3QgZWxlbWVudCwgaGVyZSdzIGFuIGV4YW1wbGUgc2hvd2luZyBqdXN0CisgICAtLSB0
aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCwgd2hpY2ggY29ycmVwb25kcyB0byB0aGUg
bGFzdCBjb21tYW5kLgorICAgLS0gTm90ZSB0aGF0IHRoZSBsYXN0IGNvbW1hbmQgZG9lcyBu
b3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byB0aGUgbGFzdAorICAgLS0gZWxlbWVudCBv
ZiB0aGUgZmlyc3QgZWxlbWVudCBvZiAkaW50ZXJuYWxIaXN0b3J5VGFibGUgYXMgaXQgaXMg
aW4gdGhpcworICAgLS0gZXhhbXBsZS4KKyAgIC0tKAorICAgLS0gKDQgTklMCisgICAtLSAo
eCAodmFsdWUgKEJhc2ljT3BlcmF0b3IpIFdSQVBQRUQgLiAjPHZlY3RvciAwOWE5M2JkMD4p
KQorICAgLS0gKHkgKHZhbHVlIChCYXNpY09wZXJhdG9yKSBXUkFQUEVEIC4gIzx2ZWN0b3Ig
MDlhOTNiYjQ+KSkKKyAgIC0tICglICh2YWx1ZSAoTWF0cml4IChQb2x5bm9taWFsIChJbnRl
Z2VyKSkpIFdSQVBQRUQgLiAjPHZlY3RvciAwOTgyZTBlMD4pKQorICAgLS0gKQorICAgLS0u
Li4KKyAgIC0tKQorICAgLS0gQWxzbyBuZWVkIHRvIGNoZWNrIGZvciBpbnB1dCBlcnJvciBp
biB3aGljaCBjYXNlIHRoZSAkaW50ZXJuYWxIaXN0b3J5VGFibGUKKyAgIC0tIGlzIG5vdCBj
aGFuZ2VkIGFuZCB0aGUgdHlwZSByZXRyaWV2ZWQgd291bGQgYmUgdGhhdCBmb3IgdGhlIGxh
c3QgY29ycmVjdAorICAgLS0gaW5wdXQuCisgICAgICAgU0VUUShmaXJzdCRMaXNwLEZJUlNU
KF8kaW50ZXJuYWxIaXN0b3J5VGFibGUkTGlzcCkkTGlzcCkkTGlzcAorICAgICAgIGNvdW50
OkludGVnZXIgOj0gMAorICAgICAgIGhpc0xlbmd0aDpJbnRlZ2VyIDo9IExJU1RfLUxFTkdU
SChfJGludGVybmFsSGlzdG9yeVRhYmxlJExpc3ApJExpc3AKKyAgICAgICBsZW5ndGg6SW50
ZWdlciA6PSBMSVNUXy1MRU5HVEgoZmlyc3QkTGlzcCkkTGlzcAorICAgICAgIC0tIFRoaXMg
aW5pdGlhbGl6ZXMgc3RlcFNhdi4gIFRoZSB0ZXN0IGlzIGEgYml0IG9mIGEgaGFjaywgbWF5
YmUgSSdsbAorICAgICAgIC0tIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHdheSB0byBkbyBpdCBs
YXRlci4KKyAgICAgICBpZiBzdHJpbmcgc3RlcFNhdiRMaXNwID0gIiM8T0JKTlVMTD4iIHRo
ZW4gU0VUUShzdGVwU2F2JExpc3AsIDAkTGlzcCkkTGlzcAorICAgICAgIC0tIElmIGhpc0xl
bmd0aCA9IDAgdGhlbiB0aGUgaGlzdG9yeSB0YWJsZSBoYXMgYmVlbiByZXNldCB0byBOSUwK
KyAgICAgICAtLSBhbmQgd2UncmUgc3RhcnRpbmcgbnVtYmVyaW5nIG92ZXIKKyAgICAgICBp
ZiBoaXNMZW5ndGggPSAwIHRoZW4gU0VUUShzdGVwU2F2JExpc3AsIDAkTGlzcCkkTGlzcAor
ICAgICAgIGlmIGhpc0xlbmd0aCA+IDAgYW5kIAorICAgICAgICAgY2FyKGNhcihfJGludGVy
bmFsSGlzdG9yeVRhYmxlJExpc3ApJExpc3ApJExpc3AgXj0gc3RlcFNhdiRMaXNwIHRoZW4K
KwkgICBTRVRRKHN0ZXBTYXYkTGlzcCwgY2FyKGNhcihfJGludGVybmFsSGlzdG9yeVRhYmxl
JExpc3ApJExpc3ApJExpc3ApJExpc3AKKyAgICAgICAgICAgd2hpbGUgY291bnQgPCBsZW5n
dGggIHJlcGVhdAorCSAgICAgICBwb3NpdGlvbihjaGFyICIlIixzdHJpbmcgRklSU1QoZmly
c3QkTGlzcCkkTGlzcCkgPSAyID0+IGNvdW50IDo9IGxlbmd0aCsxCisJICAgICAgIGNvdW50
IDo9IGNvdW50ICsxCisJICAgICAgIFNFVFEoZmlyc3QkTGlzcCxSRVNUKGZpcnN0JExpc3Ap
JExpc3ApJExpc3AKKyAgICAgICBjb3VudCA9IGxlbmd0aCArIDEgPT4gc3RyaW5nIFNFQ09O
RChTRUNPTkQoRklSU1QoZmlyc3QkTGlzcCkkTGlzcCkkTGlzcCkkTGlzcAorICAgICAgICIi
CiAKICAgIGxhc3RTdGVwKCk6U3RyaW5nID09CiAgICAgICAgc3RyaW5nIGNhcihjYXIoXyRp
bnRlcm5hbEhpc3RvcnlUYWJsZSRMaXNwKSRMaXNwKSRMaXNwCg==

----232d739d98ef532b1f91--



\start
Date: Wed, 19 Dec 2007 11:49:11 -0600
From: Tim Daly
To: Arthur Ralfs
Subject: axserver patch for lastType

> This patch is for axserver.spad.pamphlet to fix the lastType function which
> wasn't doing the right thing.

Could you give me an example of the wrong thing / right thing so I can
see that the patch was applied correctly?

\start
Date: Wed, 19 Dec 2007 10:20:49 -0800
From: Arthur Ralfs
To: Tim Daly
Subject: Re: axserver patch for lastType

> > This patch is for axserver.spad.pamphlet to fix the lastType 
> function which
> > wasn't doing the right thing.
> 
> Could you give me an example of the wrong thing / right thing so 
> I can
> see that the patch was applied correctly?
> 
> Tim

Just about any sequence of commands will start off right but then
go wrong.  For example the recent derivative example:

x:=operator x         Type: BasicOperator
y:=operator y         Type: BasicOperator
F:=operator F         Type: BasicOperator
a:=F(x z,y z,z**2)+x y(z+1)         Type: BasicOperator   should be Expression( Integer )

even simpler, issue )clear all then

x         Type: Variable x
x(1)  this is an error but still gives Type: Variable x,  with patch it
gives no type.

\start
Date: Wed, 19 Dec 2007 15:04:56 -0500
From: Tim Daly
To: Arthur Ralfs
Subject: Re: axserver patch for lastType

Thanks for the test case.

Just a side note, your patch didn't install properly.
Please try to get the lastest version out of silver when
posting patches. I've been modifying the file for additional
browser functionality so the silver version is moving.

\start
Date: Wed, 19 Dec 2007 16:22:37 -0600
From: Tim Daly
To: list
Subject: 20071218.01.acr.patch
Cc: Arthur Ralfs

> > This patch is for axserver.spad.pamphlet to fix the lastType 
> function which
> > wasn't doing the right thing.
> 
> Could you give me an example of the wrong thing / right thing so 
> I can
> see that the patch was applied correctly?
> 
> Tim

Just about any sequence of commands will start off right but then
go wrong.  For example the recent derivative example:

x:=operator x         Type: BasicOperator
y:=operator y         Type: BasicOperator
F:=operator F         Type: BasicOperator
a:=F(x z,y z,z**2)+x y(z+1)         Type: BasicOperator   
                          should be Expression( Integer )

even simpler, issue )clear all then

x         Type: Variable x
x(1)  this is an error but still gives Type: Variable x,  with patch it
gives no type.

Arthur

=======================================================================
diff --git a/changelog b/changelog
index ca336c0..001a035 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071218 acr src/algebra/axserver.spad fix lastType output re: errors
 20071217 tpd src/algebra/variable.spad ignore regression test gensym (7041)
 20071217 tpd src/algebra/lodo.spad ignore regression test gensym (7042)
 20071217 acr src/algebra/mathml.spad fix hex(10) mathml rendering (7015)
diff --git a/src/algebra/axserver.spad.pamphlet b/src/algebra/axserver.spad.pamphlet
index 77910f1..6862900 100644
--- a/src/algebra/axserver.spad.pamphlet
+++ b/src/algebra/axserver.spad.pamphlet
@@ -518,18 +518,57 @@ This is done in the call to replace-entitites (see http.lisp)
        CLOSE(q)$Lisp
        CLOSE(s)$Lisp
 
+@
+\subsection{lastType}
+To examine the \$internalHistoryTable use the following line
+\begin{verbatim}
+  )lisp |$internalHistoryTable|
+\end{verbatim}
+We need to pick out first member of internalHistoryTable and then pick out
+the element with \% as first element. Here is an example showing just
+the first element of the list, which correponds to the last command.
+
+Note that the last command does not necessarily correspond to the last
+element of the first element of \$internalHistoryTable as it is in this
+example.
+\begin{verbatim}
+   (
+    (4 NIL
+    (x (value (BasicOperator) WRAPPED . #<vector 09a93bd0>))
+    (y (value (BasicOperator) WRAPPED . #<vector 09a93bb4>))
+    (% (value (Matrix (Polynomial (Integer))) WRAPPED . #<vector 0982e0e0>))
+    )
+   ...
+   )
+\end{verbatim}
 
+We also need to check for input error in which case the \$internalHistoryTable
+is not changed and the type retrieved would be that for the last correct
+input.
+<<package AXSERV AxiomServer>>=
    lastType():String ==
---  The last history entry is the first item in the $internalHistoryTable 
---  list so car(_$internalHistoryTable$Lisp) selects it.  Here's an example:
---  (3 (x+y)**3 (% (value (Polynomial (Integer)) 
---  WRAPPED 1 y (3 0 . 1) (2 1 x (1 0 . 3)) (1 1 x (2 0 . 3))
---  (0 1 x (3 0 . 1)))))
---  This corresponds to the input "(x+y)**3" being issued as the third 
---  command after starting axiom.  
--- The following line selects the type information.
-       string car(cdr(car(cdr(car(cdr(cdr(car(_$internalHistoryTable$Lisp)_
-         $Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp)$Lisp
+     SETQ(first$Lisp,FIRST(_$internalHistoryTable$Lisp)$Lisp)$Lisp
+     count:Integer := 0
+     hisLength:Integer := LIST_-LENGTH(_$internalHistoryTable$Lisp)$Lisp
+     length:Integer := LIST_-LENGTH(first$Lisp)$Lisp
+     -- This initializes stepSav.  The test is a bit of a hack, maybe I'll
+     -- figure out the right way to do it later.
+     if string stepSav$Lisp = "#<OBJNULL>" then SETQ(stepSav$Lisp, 0$Lisp)$Lisp
+     -- If hisLength = 0 then the history table has been reset to NIL
+     -- and we're starting numbering over
+     if hisLength = 0 then SETQ(stepSav$Lisp, 0$Lisp)$Lisp
+     if hisLength > 0 and 
+       car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp ^= stepSav$Lisp then
+        SETQ(stepSav$Lisp,car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp)$Lisp
+        while count < length  repeat
+         position(char "%",string FIRST(first$Lisp)$Lisp) = 2 => 
+           count := length+1
+         count := count +1
+         SETQ(first$Lisp,REST(first$Lisp)$Lisp)$Lisp
+     count = length + 1 => 
+         string SECOND(SECOND(FIRST(first$Lisp)$Lisp)$Lisp)$Lisp
+     ""
+
 
    lastStep():String ==
        string car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp

\start
Date: 20 Dec 2007 09:51:28 +0100
From: Martin Rubey
To: list
Subject: IssueTracker

Dear all,

I am working my way through the algebra issues on IssueTracker.  For the
moment, I give those bugs that are fixed in FriCAS the status "fix proposed",
with a comment that it is fixed in FriCAS.  (Of course, as soon as I encounter
a fixed bug in one of the other versions, I will do the same, adding the
comment "fixed in " XXX, but I have yet to compile the current versions.)

I hope this is acceptable to all.

However, I ran into another, more principal problem: some bug reports contain
actually several different bugs (shame on me!) that I thought to be related
when I entered them, but it now turns out that this is not the case.  An
example is bug #293.

Should I split the bug report in two?  I believe I shouldn't, because this
might confuse people who are referring to the bug with the IssueTracker number
(as they should, in my opinion).  But I'm open for suggestions.

\start
Date: 20 Dec 2007 12:09:28 +0100
From: Martin Rubey
To: list
Subject: Re: IssueTracker

Dear all,

for today I'll stop working on IssueTracker.  But I'd like to encourage all
developers of open-axiom and axiom to go through the issues which have status

  fix proposed

and check whether they work in their systems, too.  These are just 39 bugs,
maybe some are fixed already on all systems.

If they happen to be, just add

  fixed in axiom

or

  fixed in open-axiom.

Please close issues only if they are fixed in all three versions.

Apart from that, I would like to encourage all versions to use IssueTracker for
*all* bugs.  I think it's a shame to have four separate bug tracking systems,
four different numberings, etc.  It becomes very hard to fnd out which bugs are
fixed, which are open.

Thank you, and thank you Bill for your continued support,

\start
Date: 20 Dec 2007 18:47:04 +0100
From: Martin Rubey
To: list
Subject: Re: [#55] Axiom doesn't run on Windows

Dear Tim, Gaby,

mathaction@newsynthesis.org (daly) writes:

> Status: fix proposed => closed 
> 
> Strictly speaking, Axiom does not run on Windows
> so this isn't a bug but a feature request.

Tim, I guess with Axiom you mean your project.  If this is indeed the case,
please do not close bugs, just because they are fixed (in one sense or the
other) in this project - rather make the status "fix-proposed".  I would like
to have IssueTracker used as a common database of bugs.

Unless, of course, the issue is fixed in all three versions of axiom:  Gaby,
do HyperDOc and Graphics run on MS Windows for open-axiom?

\start
Date: Thu, 20 Dec 2007 15:59:09 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: [#55] Axiom doesn't run on Windows

>> Status: fix proposed => closed 
>> 
>> Strictly speaking, Axiom does not run on Windows
>> so this isn't a bug but a feature request.
>
>Tim, I guess with Axiom you mean your project.  If this is indeed the case,
>please do not close bugs, just because they are fixed (in one sense or the
>other) in this project - rather make the status "fix-proposed".  I would like
>to have IssueTracker used as a common database of bugs.

Clearly when the bug says Axiom it applies to the Axiom project.
If it says Fricas or OpenAxiom it applies to those projects.

If you'd like to propose a meta-name that is not Axiom then 
it might make sense to have a converged bug list. But if I have
to constantly struggle with the statement "this is a bug in Axiom"
when it is not, then a converged bug list does nothing but sully
the Axiom project reputation by reporting as bugs things that are fixed.

As you can see by my response to your "please review" request, I'm
perfectly happy to respond to Axiom bug reports. If it mentions
"Axiom" it means this project. So the above bug report is a feature
request.

If you'd like to keep bugs in fix-proposed then list it as a Fricas
or OpenAxiom bug report.

\start
Date: Thu, 20 Dec 2007 16:13:39 -0500
From: Tim Daly
To: Martin Rubey
Subject: #325 Severe bug in normalize$EFSTRUC

>> Status: fix proposed 


I've spent the last 2 hours dragging thru the fricas change list
trying to reverse-engineer #325 Severe bug in normalize$EFSTRUC

I'm giving up on this task until someone posts a patch.

A "fix proposed" status needs to say what the bug was and what the fix
is. The fact that it runs correctly in Fricas provides no useful
information about what the fix might be and, therefore, "fix proposed"
is not the proper tag. 

Where Axiom has fixes I cite the actual diff-Naur patch number so
someone can look it up in the mailing list. The mailing list post
provides an explanation for the fix.




If we ever hope to keep the algebra from diverging, the only possible
solution seems to be posting diff-Naur patches, possibly in a central
location. Without that level of documentation it becomes impossible
to find what changed. And the algebra should have a converged test
suite so we know we all get the same answers. I posted my regression
test code and there are over 100 input files with known answers that
can be automatically checked.

\start
Date: 20 Dec 2007 21:30:48 +0100
From: Martin Rubey
To: list
Subject: a meta name for axiom, open.axiom, fricas. was: re: [#55] Axiom doesn't run on	Windows

Tim Daly writes:

> >> Status: fix proposed => closed 
> >> 
> >> Strictly speaking, Axiom does not run on Windows
> >> so this isn't a bug but a feature request.
> >
> >Tim, I guess with Axiom you mean your project.  If this is indeed the case,
> >please do not close bugs, just because they are fixed (in one sense or the
> >other) in this project - rather make the status "fix-proposed".  I would
> >like to have IssueTracker used as a common database of bugs.
> 
> Clearly when the bug says Axiom it applies to the Axiom project.

This is your definition.  From a legal standpoint you may be right.  But I must
say that it complicates thing enormously if I have to replace "axiom" with
"axiom, open-axiom, fricas" in every bug report.

> If it says Fricas or OpenAxiom it applies to those projects.
> 
> If you'd like to propose a meta-name that is not Axiom 

Please propose such a name.  I cannot.  For me, the meta name is Axiom, and
there happens to be a sub-project bearing the same name.  But that's my
personal and biased view of things.

\start
Date: 20 Dec 2007 21:38:30 +0100
From: Martin Rubey
To: Tim Daly
Subject: Re: #325 Severe bug in normalize$EFSTRUC

Tim Daly writes:

> >> Status: fix proposed 
> 
> 
> I've spent the last 2 hours dragging thru the fricas change list
> trying to reverse-engineer #325 Severe bug in normalize$EFSTRUC

Why don't you just diff efstruc.spad.pamphlet?  It seems that it was a
side-effect of fixing #294, but I do not really know.

\start
Date: Thu, 20 Dec 2007 17:11:40 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows

>> >> Status: fix proposed => closed 
>> >> 
>> >> Strictly speaking, Axiom does not run on Windows
>> >> so this isn't a bug but a feature request.
>> >
>> >Tim, I guess with Axiom you mean your project.  If this is indeed the case,
>> >please do not close bugs, just because they are fixed (in one sense or the
>> >other) in this project - rather make the status "fix-proposed".  I would
>> >like to have IssueTracker used as a common database of bugs.
>> 
>> Clearly when the bug says Axiom it applies to the Axiom project.
>
>This is your definition.  From a legal standpoint you may be right.  But I must
>say that it complicates thing enormously if I have to replace "axiom" with
>"axiom, open-axiom, fricas" in every bug report.

It appears that this already exists because you can "close" a bug in 
Axiom or Fricas, right?


>> If it says Fricas or OpenAxiom it applies to those projects.
>> 
>> If you'd like to propose a meta-name that is not Axiom 
>
>Please propose such a name.  I cannot.  For me, the meta name is Axiom, and
>there happens to be a sub-project bearing the same name.  But that's my
>personal and biased view of things.

Simple. Don't use the project name in the bug report.



The meta-name isn't Axiom and I will continue to act upon anything that
says its an "Axiom" bug because it applies to the Axiom project. Just
like Waldek will act upon anything that says its a "Fricas" bug because
it applies to the Fricas project.



The fact that the Axiom project forked does not mean that the name
is suddenly generic. If, in the future, Fricas forks four times are
they all called Fricas?

This point has been beaten to death but I will continue to make the point.
The license allows you to fork the code but the project name remains with
the project. The fact that Gaby and Waldek insist on confusing the issue
just makes it all the more tedious for everyone concerned. A trivial
rename would completely clear the whole issue away. We all know this.
Waldek "almost" did the right thing but has decided to not only install
the "fricas" command but to reach out and damage the "axiom" command. That
is both irrational and aggressive. Hardly a cooperative spirit there.



Maintaining this confusion doesn't help the users. Imagine a new CAS
user who decides to download several projects like pari, maxima, 
Axiom, Fricas, and OpenAxiom. He decides to install them all and play
with them. The end result will be 3 directories of code, only one of
which can be used because Fricas and OpenAxiom step on Axiom and each
other. It is clearly "the wrong thing". And there is a trivial fix.




Who DOES it benefit? Two individuals... 

The Fricas/Axiom fork and the continuing attempt at sowing ambiguity 
is for Waldek's benefit.

The OpenAxiom/Axiom fork and the continuing attempt at sowing ambiguity 
is for Gaby's benefit. 

No-one else benefits. Nobody. 

\start
Date: Thu, 20 Dec 2007 20:13:47 -0500
From: Cliff Yapp
To: list
Subject: Re: a meta name for axiom, open.axiom, fricas

Martin Rubey wrote:

>> If you'd like to propose a meta-name that is not Axiom 
> 
> Please propose such a name.  I cannot.  For me, the meta name is Axiom, and
> there happens to be a sub-project bearing the same name.  But that's my
> personal and biased view of things.

What about Scratchpad?  If I've got the history right all of these
systems might be considered descendants of Scratchpad, and I don't think
there is any longer a product called Scratchpad to be confused with
them?  Or perhaps Scratchpad-Type systems if that's better?

\start
Date: Thu, 20 Dec 2007 18:56:06 -0800
From: Ed Borasky
To: Tim Daly
Subject: Re: a meta name for axiom, open.axiom, fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on	Windows

root wrote:
> Maintaining this confusion doesn't help the users. Imagine a new CAS
> user who decides to download several projects like pari, maxima, 
> Axiom, Fricas, and OpenAxiom. He decides to install them all and play
> with them. The end result will be 3 directories of code, only one of
> which can be used because Fricas and OpenAxiom step on Axiom and each
> other. It is clearly "the wrong thing". And there is a trivial fix.

Or imagine an *experienced* CAS user, such as myself. I have Pari and 
Maxima, though I've never really touched Pari. I have Yacas because 
there's an R library that talks to it. And I have Axiom because I 
discovered an old version of it a number of years ago on a Knoppix 
remaster by Dirk Eddelbuettel called "Quantian". There is no confusion 
on my machines simply because I don't need either FriCAS or OpenAxiom -- 
and I haven't installed them -- and I don't intend to.

\start
Date: Thu, 20 Dec 2007 22:06:50 -0500
From: Bill Page
To: Ed Borasky
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows

On 12/20/07, Ed Borasky Ed Borasky wrote:
> ... There is no confusion on my machines simply because I don't
> need either FriCAS or OpenAxiom -- and I haven't installed them --
> and I don't intend to.
>

So are you arguing against Tim's point of view? If there is no
confusion then why all this concern over a name?

\start
Date: Thu, 20 Dec 2007 23:16:59 -0500
From: Tim Daly
To: Ed Borasky
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on Windows

> Dirk Eddelbuettel called "Quantian"

I worked with him on that. Haven't heard from him in a while.
Have to msg him. Prior to Quantian I was distributing "Rosetta"
CDs which had about 100 CAS-ish systems on them. Along came 
Knoppix. I started the Doyen effort but Dirk got the Knoppix
thing up and running very quickly. 

Quantian is a nice piece of work.

\start
Date: Thu, 20 Dec 2007 20:23:55 -0800
From: Ed Borasky
To: Tim Daly
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on Windows

root wrote:
>> Dirk Eddelbuettel called "Quantian"
> 
> I worked with him on that. Haven't heard from him in a while.
> Have to msg him. Prior to Quantian I was distributing "Rosetta"
> CDs which had about 100 CAS-ish systems on them. Along came 
> Knoppix. I started the Doyen effort but Dirk got the Knoppix
> thing up and running very quickly. 
> 
> Quantian is a nice piece of work.
> 
> Tim
> 

Yeah ... I'm on their mailing list. Dirk hasn't done much with it in the 
past couple of years, actually. The big deal was clustering via 
OpenMosix, and I think OpenMosix didn't survive the transition from the 
2.4 to 2.6 kernel, or something like that. Keeping up with the R 
libraries on Debian keeps him pretty busy, I think, plus I also think he 
has a full-time job as a quant somewhere too.

A year or so ago I got a CD from ACM SIGSAM with a bunch of CAS on it, 
including, of course, Axiom. I don't remember what else was on there, 
but I don't think there were any I hadn't heard of from either Debian or 
Gentoo.

BTW ... it's possible I'll have my One Laptop Per Child machine before 
the end of the year. The shipments have started, and I ordered early 
enough that I might get it between Christmas and New Years, or at worst, 
in the first week or two of January. So I am looking for a lightweight 
CAS. I've got Maxima (SBCL runtime) working on the virtual machine, so 
if there's room, that's probably what I'll go with. For what I do -- 
queuing theory mostly -- it has everything I need (matrices, Laplace 
transforms and basic algebra and calculus).

\start
Date: Thu, 20 Dec 2007 20:33:45 -0800
From: Ed Borasky
To: Bill Page
Subject: Re: a meta name for axiom, open.axiom, fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on Windows

Bill Page wrote:
> On 12/20/07, Ed Borasky Ed Borasky wrote:
>> ... There is no confusion on my machines simply because I don't
>> need either FriCAS or OpenAxiom -- and I haven't installed them --
>> and I don't intend to.
>>
> 
> So are you arguing against Tim's point of view? If there is no
> confusion then why all this concern over a name?
> 
> Regards,
> Bill Page.
> 

I'm arguing in favor of a single Axiom, called Axiom. If FriCAS and 
OpenAxiom want to rejoin the main branch, that's one way. Another way is 
to ignore the other two and just use Axiom.

There are lots of things I don't put on my machines because they're not 
ready for prime time, and FriCAS and OpenAxiom fall into that class for 
a number of reasons including the potential directory name clashes. And 
I run "testing-level" (borderline unstable) boxes. I simply see no 
benefit to a recent fork of Axiom -- not enough has changed since the 
fork(s) to the parts of the package I really care about for me to want 
to spend time testing them.

Now if I find something broken in Axiom and it gets fixed, being open 
source, FriCAS and OpenAxiom are perfectly capable of picking it up. Or 
if someone puts something *useful* in one of the two, I'd take a look. I 
just don't think that's going to happen because of why the forks 
happened -- they came about for reasons other than the usefulness of the 
core language for applied mathematics.

In other words, "come back when you've got better math than Axiom". :)

\start
Date: 21 Dec 2007 06:39:01 +0100
From: Martin Rubey
To: Tim Daly
Subject: Re: a meta name for axiom, open.axiom, fricas

Tim Daly writes:

> >> >> Status: fix proposed => closed 
> >> >> 
> >> >> Strictly speaking, Axiom does not run on Windows
> >> >> so this isn't a bug but a feature request.
> >> >
> >> >Tim, I guess with Axiom you mean your project.  If this is indeed the case,
> >> >please do not close bugs, just because they are fixed (in one sense or the
> >> >other) in this project - rather make the status "fix-proposed".  I would
> >> >like to have IssueTracker used as a common database of bugs.
> >> 
> >> Clearly when the bug says Axiom it applies to the Axiom project.
> >
> >This is your definition.  From a legal standpoint you may be right.  But I must
> >say that it complicates thing enormously if I have to replace "axiom" with
> >"axiom, open-axiom, fricas" in every bug report.
> 
> It appears that this already exists because you can "close" a bug in 
> Axiom or Fricas, right?

I did not close a single bug, except it was fixed in all three projects.

> The meta-name isn't Axiom and I will continue to act upon anything that
> says its an "Axiom" bug because it applies to the Axiom project. Just
> like Waldek will act upon anything that says its a "Fricas" bug because
> it applies to the Fricas project.

You are being very cooperative.

> The fact that the Axiom project forked does not mean that the name
> is suddenly generic. If, in the future, Fricas forks four times are
> they all called Fricas?

Of course not. I'd call them all axiom.

\start
Date: Fri, 21 Dec 2007 01:50:14 -0500
From: Tim Daly
To: Ed Borasky
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on Windows

>A year or so ago I got a CD from ACM SIGSAM with a bunch of CAS on it, 
>including, of course, Axiom. I don't remember what else was on there, 
>but I don't think there were any I hadn't heard of from either Debian or 
>Gentoo.

If that is the ISSAC CD I probably put that together also. -- Tim

\start
Date: Fri, 21 Dec 2007 01:53:19 -0500
From: Tim Daly
To: Ed Borasky
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on Windows

>BTW ... it's possible I'll have my One Laptop Per Child machine before 
>the end of the year. The shipments have started, and I ordered early 
>enough that I might get it between Christmas and New Years, or at worst, 
>in the first week or two of January. So I am looking for a lightweight 
>CAS. I've got Maxima (SBCL runtime) working on the virtual machine, so 
>if there's room, that's probably what I'll go with. For what I do -- 
>queuing theory mostly -- it has everything I need (matrices, Laplace 
>transforms and basic algebra and calculus).

I'm trying to set up the sugar VMware environment for that.

Axiom has run on a lap with 16 megs of memory. It will possibly 
run on the OLPC, depending on the native support shipped.

\start
Date: Fri, 21 Dec 2007 01:04:22 -0500
From: Bill Page
To: Ed Borasky
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows

On 12/20/07, Ed Borasky wrote:
> Bill Page wrote:
> > On 12/20/07, Ed Borasky wrote:
> >> ... There is no confusion on my machines simply because I don't
> >> need either FriCAS or OpenAxiom -- and I haven't installed them --
> >> and I don't intend to.
> >>
> >
> > So are you arguing against Tim's point of view? If there is no
> > confusion then why all this concern over a name?
> >
>
> I'm arguing in favor of a single Axiom, called Axiom. If FriCAS
> and OpenAxiom want to rejoin the main branch, that's one way.

I believe that is what nearly everyone wants. However I am not sure if
this is what Tim wants since he specifically invited both Waldek and
Gaby to create forks when they could not come to some agreement about
basic development methodology and the future of the project. And the
current argument over names seems to further distance Axiom from these
forks.

> Another way is to ignore the other two and just use Axiom.
>

I think evolution does not favor this strategy. ;-)

> There are lots of things I don't put on my machines because they're
> not ready for prime time, and FriCAS and OpenAxiom fall into that
> class for a number of reasons including the potential directory name
> clashes. And I run "testing-level" (borderline unstable) boxes.

There are no directory name clashes. I run all three side-by-side at

http://axiom-wiki.newsynthesis.org

Installation was simple. The only thing you need to be concerned
about is the proper setting of the AXIOM variable.

> I simply see no benefit to a recent fork of Axiom -- not enough has
> changed since the fork(s) to the parts of the package I really care
> about for me to want to spend time testing them.
>

Your time it your time, but I think you are quite wrong about how much
has changed in the forks. For example with FriCAS you can use hyperdoc
without having it crash unexpectedly. You can make deep fundamental
changes to the Algebra without having SPAD abort because of an
inconsistency in the database files. And you can build a complete
Windows version using clisp in cygwin. There are also a large number
of differences that are not so visible to users but that make life
easier for developers, e.g. the autoconf-based build system.

> Now if I find something broken in Axiom and it gets fixed, being
> open source, FriCAS and OpenAxiom are perfectly capable of
> picking it up.

Of course that works both ways and there are several examples of that
over the last few months.

> Or if someone puts something *useful* in one of the two, I'd take
>  a look. I just don't think that's going to happen because of why
> the forks happened -- they came about for reasons other than
> the usefulness of the core language for applied mathematics.

I disagree. But first my apology in advance to Tim for dwelling on
features of projects other than Axiom on this list. My intention is
only to counter the claim Ed makes above.

Unlike the original Axiom project which appears to focus on
documentation and the "30 year horizon", both FriCAS and OpenAxiom
specifically state "usefulness of the core language for applied
mathematics" as one of their immediate goals. E.g.

"OpenAxiom strives to support ubiquitous, advanced, high quality open
source computer algebra on major operating systems, in particular
major Unix variants, GNU/Linux variants, Windows, and handheld
devices. It aims at being the open source computer algebra system of
choice for research, teaching, engineering, etc."

http://www.open-axiom.org

And FriCAS:

"Longer term plans.

The compiler for Spad language included in Axiom is buggy and has
serious performance problems -- new compiler is needed. New
mathematical algorithms. Assertion support."

http://www.math.uni.wroc.pl/~hebisch/fricas/fricas-reg.html

>
> In other words, "come back when you've got better math than
> Axiom". :)
>

Fair enough. One example of that already is Martin Rubey's "GUESS"
package although that may not be of much specific interest to you.

But in general my sincere wish is for a more collaborative,
co-operative, less competitive and more unified environment. As you
said: "a single Axiom".

\start
Date: Fri, 21 Dec 2007 02:09:34 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: a meta name for axiom, open.axiom, fricas

> Of course not. I'd call them all axiom.

That's fine. Since you seem to be the primary person interested in
maintaining this bogus ambiguity (so you don't have to change
axiom.el???)  there doesn't seem to be a way we can work together on a
converged bug list, converged test suite, or a converged wiki. You're
welcome to use any terms you like to maintain your world view but I
can't seem to communicate with you about defining fundamentally
distinct terms. Quite an odd failing in a mathematician, actually.

So I'll cease my review of the outstanding bug list and wait for you
to submit diff-Naur patches to the various things-you-call-axiom. My
local list is a superset of the "converged list" anyway so there was
only a sense of cooperation to be gained by my efforts. Clearly that
was wasted.

\start
Date: Thu, 20 Dec 2007 23:20:22 -0800
From: Ed Borasky
To: Tim Daly
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: Re: [Axiom-developer] Re: [#55] Axiom doesn't run on Windows

root wrote:
>> BTW ... it's possible I'll have my One Laptop Per Child machine before 
>> the end of the year. The shipments have started, and I ordered early 
>> enough that I might get it between Christmas and New Years, or at worst, 
>> in the first week or two of January. So I am looking for a lightweight 
>> CAS. I've got Maxima (SBCL runtime) working on the virtual machine, so 
>> if there's room, that's probably what I'll go with. For what I do -- 
>> queuing theory mostly -- it has everything I need (matrices, Laplace 
>> transforms and basic algebra and calculus).
> 
> I'm trying to set up the sugar VMware environment for that.
> 
> Axiom has run on a lap with 16 megs of memory. It will possibly 
> run on the OLPC, depending on the native support shipped.
> 
> Tim
> 

The biggest bottleneck appears to be the size of the flash disk, about 1 
GB. The images I've been downloading are about 800 MB full and 200 MB 
free, so there's not a lot of room to install more software. It doesn't 
ship with gcc, so you have to cross-compile (which ain't all that bad a 
deal). Basically, what you want to do is build a binary i386 (actually I 
think i686 works) RPM and install it.

When I build the virtual machines, I put a new 1.5 GB or 2 GB virtual 
disk on them, and then copy the downloaded 1 GB image filesystem over to 
the new one. Fedora 8 Rescue CD is your friend. :)

I haven't been able to get VMware Tools to configure. That needs perl, 
gcc, make and kernel headers. But the virtual machine appears to work 
without VMware Tools.

If you have an RPM somewhere, I'll try to load it into my virtual machine.

\start
Date: Fri, 21 Dec 2007 09:21:21 -0600 (CST)
From: Gabriel Dos Reis
To: list
Subject: Re: Re: a meta name for axiom,	open.axiom, fricas

On Thu, 20 Dec 2007, C Y wrote:

| 
| Martin Rubey wrote:
| 
| >> If you'd like to propose a meta-name that is not Axiom 
| > 
| > Please propose such a name.  I cannot.  For me, the meta name is Axiom, and
| > there happens to be a sub-project bearing the same name.  But that's my
| > personal and biased view of things.
| 
| What about Scratchpad?  If I've got the history right all of these
| systems might be considered descendants of Scratchpad, and I don't think
| there is any longer a product called Scratchpad to be confused with
| them?  Or perhaps Scratchpad-Type systems if that's better?

Technically AXIOM -- all caps -- isn't owned by any of the projects.
I'd prefer to stick to it.  

At a recent NSF workshop, I spoke with some people directly invoved in
making AXIOM open source.  From what I understand, the claim that
someone other than NAG owns Axiom may be a joke.  Furthermore, I also
learnt that `Open Axiom' or `OpenAxiom' was the name that was
originally proposed.  I wasn't aware of that fact.

\start
Date: Fri, 21 Dec 2007 09:26:40 -0600 (CST)
From: Gabriel Dos Reis
To: fricas-devel < >
Subject: Re: Re: a meta name for axiom, open.axiom, fricas. was: re: [#55] Axiom doesn't run on Windows

On Fri, 21 Dec 2007, Bill Page wrote:

| Installation was simple. The only thing you need to be concerned
| about is the proper setting of the AXIOM variable.

Users need to set the AXIOm environement variable in order to run
OpenAxiom.  By design.

\start
Date: Fri, 21 Dec 2007 12:45:11 -0500
From: Tim Daly
To: Bill Page
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows

> There are no directory name clashes. I run all three side-by-side at

When doing "install" I believe that all three systems use "axiom" as
the name of the execution script. Thus, OpenAxiom and Fricas (despite
ALSO creating the fricas script) are destroying the average user's
ability to install all three systems. 

You know this. You understood the email exchange between Gaby and I.
Are you also in active denial?

\start
Date: Fri, 21 Dec 2007 08:58:19 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Re: Re: a meta name for axiom,	open.axiom, fricas

--- Gabriel Dos Reis wrote:

> | What about Scratchpad?  If I've got the history right all of these
> | systems might be considered descendants of Scratchpad, and I don't
> | think there is any longer a product called Scratchpad to be
> | confused with them?  Or perhaps Scratchpad-Type systems if that's
> | better?
> 
> Technically AXIOM -- all caps -- isn't owned by any of the projects.
> I'd prefer to stick to it.  

Even at the expense of continued difficulties and confusion?  Wouldn't
it be far simpler just to change it and be done with it?

> At a recent NSF workshop, I spoke with some people directly invoved
> in making AXIOM open source.  From what I understand, the claim that
> someone other than NAG owns Axiom may be a joke.

The only hard, independent evidence I have seen on the issue is the
TESS database the USPTO maintains: 
http://tess2.uspto.gov/bin/gate.exe?f=login&p_lang=english&p_d=trmk  -
the only two entries I get for Numerical AND AXIOM are both listed as
dead.  I'm not an expert of course, so the folks at NAG may know
something I don't.

> Furthermore, I also learnt that `Open Axiom' or `OpenAxiom' was the
> name that was originally proposed.  I wasn't aware of that fact.

Interesting.

\start
Date: Fri, 21 Dec 2007 12:41:29 -0500
From: Tim Daly
To: Bill Page
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows

>I believe that is what nearly everyone wants. However I am not sure if
>this is what Tim wants since he specifically invited both Waldek and
>Gaby to create forks when they could not come to some agreement about
>basic development methodology and the future of the project. And the
>current argument over names seems to further distance Axiom from these
>forks.

At it again, eh, Bill? As I recall my position it was that the branches
were created to develop diff-Naur patches against the trunk. SVN was
created to allow that to happen. The purpose of "build-improvements"
was to develop PATCHES/CHANGESETS so they could be applied to trunk,
moving trunk to the autoconf mechanism (thus the name).

What actually happened was that the branches were being promoted,
especially by you, as "better alternatives". I complained about such
behavior. Either you are using a branch to develop changes for everyone
or you are using a branch to develop a fork.

The behavior I actually saw seemed to be the latter case. I did not see
patches developed on branches being diff-Naur'ed for trunk. What I saw
was you advocating the use of the branches as a replacement for trunk.

I specifically asked Gaby to do an autoconf changeset and I
specifically told him that I was holding up another changeset (the
name downcase) so it would no impact his work. He suggested I continue
my changes. In the end, no diff-Naur changes for autoconf ever came
out of "build-improvements".

I know of no other open source project (or closed source for that matter)
that suggests throwing away the trunk for a branch. It appears from his
email that Gaby was also involved in the GCC/EGCS fork so this is not
the first time he's forked a project.

I do notice that you seem to be quoting my opinions again.
Would you like me to set up a branch for you to maintain my alternate opinions?

\start
Date: Fri, 21 Dec 2007 12:05:41 -0500
From: Bill Page
To: Tim Daly
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows
	 

On 12/21/07, root wrote:
> > There are no directory name clashes. I run all three side-by-side at
>
> When doing "install" I believe that all three systems use "axiom" as
> the name of the execution script. Thus, OpenAxiom and Fricas (despite
> ALSO creating the fricas script) are destroying the average user's
> ability to install all three systems.
>

Nonesense. As I said: all three systems are installed at
axiom-wiki.newsynthesis.org. It was easy to do this and there are no
conflicts. Both FriCAS and OpenAxiom allow one to specify the
'./configure --prefix' option that is common to most open source
systems.

> You know this. You understood the email exchange between
> Gaby and I. Are you also in active denial?
>

It's not me, Tim.

\start
Date: Fri, 21 Dec 2007 11:30:35 -0600 (CST)
From: Gabriel Dos Reis
To: list
Subject: Re: Re: a meta name for axiom, open.axiom, fricas. was: re: [#55] Axiom doesn't run on Windows

Tim Daly wrote:

| > When doing "install" I believe that all three systems use "axiom" as
| > the name of the execution script. Thus, OpenAxiom and Fricas (despite
| > ALSO creating the fricas script) are destroying the average user's
| > ability to install all three systems.

If I did not know you, I would have explained this fanatic
determination to spread FUD about others as simple ignorance that is
simply taken care of by pointing to `shell scripts howot' and 
Autoconf 101.

\start
Date: Fri, 21 Dec 2007 14:47:30 -0600
From: Tim Daly
To: Gabriel Dos Reis, Bill Page
Subject: fact finding.

It appears that you believe that your average user should be able to do:

   svn co open-axiom/trunk oaxiom
   cd oaxiom
   ./configure
   make
   make install

So, in order to see what the DEFAULT behavior actually is, I did that.
Unfortunately it appears that OpenAxiom will not build on axiom-developer.org
I have to report the error message:

./configure
bash: ./configure: /bin/sh: bad interpreter: Permission denied

when I attempted the build on axiom-developer.org running:

   Red Hat Linux release 9 (Shrike)

which is a quad processor machine Intel box.

Linux axiom-developer.org 2.6.17.13-RH211rc35 #12 
SMP Mon Oct 2 22:00:49 CDT 2006 i686 i686 i386 GNU/Linux

I do not know what the problem is because 

[daly@axiom-developer oaxiom]$ sh
sh-2.05b$ 

works fine. The first line of configure says:
#! /bin/sh

Since Open-Axiom won't build I'm left with reading the sources.
Further investigation reveals (from Makefile.pamphlet):

install:
	@echo Installing OpenAxiom in $(prefix)
	@$(mkinstalldirs) $(DESTDIR)$(open_axiom_installdir)
	cp -pr $(builddir)/$(target)/* $(DESTDIR)$(open_axiom_installdir)
	rm -f $(bindir)/axiom
	@$(mkinstalldirs) $(bindir)
	$(INSTALL_PROGRAM) src/scripts/axiom $(bindir)
	@echo OpenAxiom installation finished.


and the src/scripts/axiom.in file contains

showuse() {
echo "axiom"
echo "     [-ht   |-noht]       whether to use HyperDoc"

Thus it appears to me that the DEFAULT behavior will install 
Open-Axiom using the command /usr/local/axiom

Once I can build a new virtual machine I'll try to build OpenAxiom
and verify that this is the case.

\start
Date: Fri, 21 Dec 2007 16:25:03 -0500
From: Bill Page
To: Tim Daly
Subject: Re: fact finding.
Cc: Gabriel Dos Reis

On 12/21/07, Tim Daly wrote:
> It appears that you believe that your average user should be
> able to do:
>
>    svn co open-axiom/trunk oaxiom
>    cd oaxiom
>    ./configure
>    make
>    make install
>
> So, in order to see what the DEFAULT behavior actually is,
> I did that. Unfortunately it appears that OpenAxiom will not
> build on axiom-developer.org
> I have to report the error message:
>
> ./configure
> bash: ./configure: /bin/sh: bad interpreter: Permission denied
>
> when I attempted the build on axiom-developer.org running:
>
>    Red Hat Linux release 9 (Shrike)
>
> which is a quad processor machine Intel box.
>
> Linux axiom-developer.org 2.6.17.13-RH211rc35 #12
> SMP Mon Oct 2 22:00:49 CDT 2006 i686 i686 i386 GNU/Linux
>
> I do not know what the problem is because
>
> [daly@axiom-developer oaxiom]$ sh
> sh-2.05b$
>
> works fine. The first line of configure says:
> #! /bin/sh
>

I works for me on axiom-developer.org. See /home/page/oaxiom/config.log

[page@axiom-developer oaxiom]$ svn co
https://svn.open-axiom.org/svnroot/open-axiom/trunk oaxiom
...
[page@axiom-developer oaxiom]$ cd oaxiom
[page@axiom-developer oaxiom]$ ./configure
...
[page@axiom-developer oaxiom]$ more config.log
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by OpenAxiom configure 1.1.0-2007-12-19, which was
generated by GNU Autoconf 2.60.  Invocation command line was

  $ ./configure

## --------- ##
## Platform. ##
## --------- ##

hostname = axiom-developer.org
uname -m = i686
uname -r = 2.6.17.13-RH211rc35
uname -s = Linux
uname -v = #12 SMP Mon Oct 2 22:00:49 CDT 2006

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = i686
...

No error messages. Perhaps you have something odd in your .bashrc or .profile?

>
> Since Open-Axiom won't build I'm left with reading the sources.
> Further investigation reveals (from Makefile.pamphlet):
>
> install:
>         @echo Installing OpenAxiom in $(prefix)
>         @$(mkinstalldirs) $(DESTDIR)$(open_axiom_installdir)
>         cp -pr $(builddir)/$(target)/* $(DESTDIR)$(open_axiom_installdir)
>         rm -f $(bindir)/axiom
>         @$(mkinstalldirs) $(bindir)
>         $(INSTALL_PROGRAM) src/scripts/axiom $(bindir)
>         @echo OpenAxiom installation finished.
>
>
> and the src/scripts/axiom.in file contains
>
> showuse() {
> echo "axiom"
> echo "     [-ht   |-noht]       whether to use HyperDoc"
>
> Thus it appears to me that the DEFAULT behavior will install
> Open-Axiom using the command /usr/local/axiom
>
> Once I can build a new virtual machine I'll try to build OpenAxiom
> and verify that this is the case.
>

[page@axiom-developer oaxiom]$ ./configure --help

Says:
...
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
...

\start
Date: Fri, 21 Dec 2007 17:39:47 -0600 (CST)
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: fact finding.

On Fri, 21 Dec 2007, Tim Daly wrote:

| It appears that you believe that your average user should be able to do:

open-axiom/trunk/INSTALL:

Requirements
============

OpenAxiom uses GCL (the GNU Common Lisp) for its runtime support.  So,
if you already have a running GCL (2.6.7 or 2.6.8), that is good.
Otherwise, you would need to download a dependency tarball from
OpenAxiom's download web site.  See instructions below.

OpenAxiom needs noweb for extracting its source codes.  If you don't
have running noweb utilities, you would need to either download the
dependency tarball from OpenAxiom's download web site, or separately
install them, and then proceed with configuration as detailed below.

Note that GCL and noweb are needed only to build OpenAxiom.  They are
not needed to run it.

Finally, you would need a working GNU C compiler.  It is also recommended
that you install X11 development headers and libraries, especially
Xpm.  Windows (MingW/MSYS) users do not need X11 components.  They
still need a working GNU C compiler though.

Ah, one more note:  OpenAxiom requires GNU Make.

1. GCL and noweb prerequisites
   ---------------------------

If any of GCL or noweb is missing from the environment environment
where you're building, then you need to either separately install
them, or download the dependency tarball

    open-axiom-1.0.x-dep.tar.bz2

Please, notice that GCL and noweb are needed only to *build*
OpenAxiom.  If you plan to build OpenAxiom often, then it probably is
a good idea to separately build and install those tools once for all.


If you already have GCL and noweb installed, please go to step 2.

1.a. Download the dependency tarball open-axiom-1.0.x-dep.tar.bz2

1.b. Decompress the dependency tarball

      tar jxfv open-axiom-1.0.x-dep.tar.bz2


    That should decompress the dependency tarball in a directory
named open-axiom-1.0.x.  Rename it to open-axiom-1.1.0, e.g.:

       mv open-axiom-1.0.x open-axiom-1.1.0

2. Building OpenAxiom
   ------------------

It is assumed you have already downloaded open-axiom source tarball,
e.g. open-axiom-1.1.0.tar.bz2.  

Note: If you don't have GCL or noweb in the build environment, please
make sure that you have either followed the instructions in step 1.,
or have separately installed them before proceeding.

2.a. Decompress the OpenAxiom source tarball

      tar jfxv open-axiom-1.1.0.tar.bz2

2.b. Configure OpenAxiom

It is highly recommended that you build OpenAxiom in a directory
different from the one that contains the sources.  For example, you
may create a directory sibling to open-axiom-1.1.0 and build the
system from there:

      mkdir build-oa
      cd build-oa
      ../open-axiom-1.1.0/configure

It is possible to tell configure where to put the final OpenAxiom
executables.  By default, when you just type in configure like above,
it will configure the system with prefix /usr/local.  You can instead
say where you want it to be installed, let's say /banana/space.  You
would then have typed

     ../open-axiom-1.1.0/configure --prefix=/banana/space

2.c. Make the system

Just type

       make

or

       make 2>&1 | tee build.log

if you would like to inspect the build messages later on -- but most
users probably don't.

2.d.  Have some coffee

2.e.  Have more coffee

It can take from 30min to 2 hours to build, depending on the
compute power of the build machine.

3. Installing OpenAxiom   
   --------------------

Once the build (step 2.) has gone successfully, you may optionally try
to regress-test the system -- it can take hours.

3.a. [optional]

       make check 2>&1 | tee tests.log

3.b. The system is ready to install

If you configured the system to install in a place that needs special
privilege, e.g. /usr/local that requires administrator write, please
make sure that you've gained the adequate privileges.  Then, type:

      make install

3.c. The system is ready for use

After step 3.b., your should have a script called `axiom', in
/usr/local/bin or /banana/space/bin or /whichever/prefix/you/used/bin,
ready for your.  Just type in

    axiom

in the shell.
  

4.  Enjoy
    -----

About Make
==========

OpenAxiom build system requires GNU Make.  It might theoretically be
possible to cram the Makefiles so that they can work with a large set 
of Make programs.  However, doing so will not be cost effective.  GNU 
Make has been ported to virtually any system current OpenAxiom can build
one.  In particular, OpenAxiom uses GCL, which in turns requires GCC.
GCC requires GNU Make.  GCL too requires GNU Make.  Consequently,
the GNU Make requirement is not a stringent requirement.  It just
reflects reality.

So, if you're using a system where "make" is not GNU Make, then try
"gmake" instead. 

Send comments and suggestions to open-axiom-devel@lists.sf.net

\start
Date: 21 Dec 2007 18:03:39 -0600
From: Gabriel Dos Reis
To: Martin Rubey
Subject: re: [#55] Axiom doesn't run on Windows

Martin Rubey writes:

| Unless, of course, the issue is fixed in all three versions of axiom:  Gaby,
| do HyperDOc and Graphics run on MS Windows for open-axiom?

Martin --

  I do expect to work on the HyperDoc and Graphics issues for windows. 
Many thanks for monitoring this.

\start
Date: 21 Dec 2007 19:28:34 -0600
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: a meta name for axiom, open.axiom,	fricas. was: re: [#55] Axiom doesn't run on Windows

Tim Daly writes:

[...]

| I know of no other open source project (or closed source for that matter)
| that suggests throwing away the trunk for a branch. It appears from his
| email that Gaby was also involved in the GCC/EGCS fork so this is not
| the first time he's forked a project.

I was an active contributor of EGCS.  I was not involved in its fork
from old gcc.

Tim, at this point, you have emptied any credibility point that may be
left. 

\start
Date: 21 Dec 2007 19:31:19 -0600
From: Gabriel Dos Reis
To: Cliff Yapp
Subject: re: Re: a meta name for axiom,	open.axiom, fricas

Cliff Yapp writes:

| --- Gabriel Dos Reis wrote:
| 
| > | What about Scratchpad?  If I've got the history right all of these
| > | systems might be considered descendants of Scratchpad, and I don't
| > | think there is any longer a product called Scratchpad to be
| > | confused with them?  Or perhaps Scratchpad-Type systems if that's
| > | better?
| > 
| > Technically AXIOM -- all caps -- isn't owned by any of the projects.
| > I'd prefer to stick to it.  
| 
| Even at the expense of continued difficulties and confusion? 

s/difficulties/FUD from Tim/.

\start
Date: Fri, 21 Dec 2007 23:10:07 -0500
From: Tim Daly
To: Gabriel Dos Reis
Subject: QED.

> Tim, at this point, you have emptied any credibility point that may be
> left. 

Not to worry, old chap, there is balance in the universe as your
credibility with me has risen quite likely as much as mine has 
fallen with you. You provided exactly the piece of information
I was seeking, which proves my point. Thank you and QED.

...[snip]...

After step 3.b., your should have a script called `axiom', in
/usr/local/bin or /banana/space/bin or /whichever/prefix/you/used/bin,
ready for your.  Just type in

    axiom

in the shell.

...[snip]...

\start
Date: Mon, 24 Dec 2007 19:38:45 -0500
From: Tim Daly
To: William Stein
Subject: Re: [sage-devel] "scholarly activity"?

>I just noticed this email on the jmol developer mailing list.  See below.
>
>if anybody has any thoughts or ideas -- long or short term -- about how to
>structure or restructure sage development so the same sort of thing doesn't
>happen to us, please speak up.   I think something like JSAGE
>(http://sagemath.org/jsage/)
>-- if it were to take off -- would really help.
>
>
>Dear Jmol team:
>This letter is to notify you that I will not be able to continue
>participating in Jmol development. I hope this situation will only
>be temporary. However, my rejoining the project depends on my
>institution being convinced to give me some kind of credit for these
>activities. Since my contributions to the Jmol project were not
>deemed a "form of off-campus, peer reviewed scholarly or artistic
>product", I cannot afford to put any more time into the project. As
>it stands, I have been told that my scholarly activity level has not
>been adequate recently. To help me increase my scholarly output, I
>will have to teach 3-6 hours more of classes each week, and will be
>responsible for grading additional work from 20-60 more students.
>Somehow that is supposed to increase my scholarly activity:) Put
>simply, this means I will not have time to devote to Jmol or most of
>my other scholarly activities. Since Jmol is the scholarly activity
>that doesn't presently count, I need to drop that and use any time I
>can eke out for scholarship of other kinds. If I can convince my
>department to include contributions to projects like Jmol on a list
>of creditable activity, I will be able to rejoin the project. This
>is likely to take a semester. Thus I hope to be able to rejoin the
>project next spring, about May.

I've been presenting Axiom development at various locations, usually
at conferences or requested talks. At almost every conference where
I've spoken there was a later "birds of a feather" discussion. The
primary issue is academic credit.

The key problem is that the most active developers are likely to
be doctoral or recent-degree holders, likely in tenure track positions.
The issues seem to be that
  (a) open source is NOT considered publishing
  (b) code development is not considered research
  (c) only published, peer-reviewed papers count at the tenure review.

Thus, a tenure-sensitive professor who develops a great algorithm or
program, which takes a tremendous amount of time and effort, gets no
credit at the tenure review. Worse, since the time spent on the program
takes away from the publications pile, it actually works against the
possibility of tenure.

Partially the problem is that computational mathematics is not yet
considered a separate department from mathematics. Another partial
cause of the problem is that the tenure committee is composed of
professors who are not well aware of, or being "mathematicians",
look down upon programming as "not really research". Yet another 
issue is that peer-review rarely, if ever, involves a peer-review 
of the code.

This has come up in at least 6 venues, with a total meeting representation
of over 40 professors from many different locations. Thus the issue is not
some local problem but fairly systemic.

Carlo Traverso, head of the Department of Mathematica, in Pisa, Italy
and I have been looking at creating a new kind of journal to address
this problem. The journal would accept only "literate papers", that is,
papers which contain both the research results and the associated source
code. The programs would be published in a peer-reviewed journal with a
requirement that the program could be run by an independent party and 
reproduce the reported research results (similar to other sciences).

While this would not address the time involved in writing and debugging
a program, it would at least give a venue for presenting open source
code in a reproducible, peer-reviewed (and therefore tenure-approved)
format.

\start
Date: Tue, 25 Dec 2007 10:54:53 +0100
From: Ondrej Certik
To: list
Subject: Re: [sage-devel] Re: "scholarly activity"?

On Dec 25, 2007 1:38 AM, Tim Daly wrote:
>
> >I just noticed this email on the jmol developer mailing list.  See below.
> >
> >if anybody has any thoughts or ideas -- long or short term -- about how to
> >structure or restructure sage development so the same sort of thing doesn't
> >happen to us, please speak up.   I think something like JSAGE
> >(http://sagemath.org/jsage/)
> >-- if it were to take off -- would really help.
> >
> >
> >Dear Jmol team:
> >This letter is to notify you that I will not be able to continue
> >participating in Jmol development. I hope this situation will only
> >be temporary. However, my rejoining the project depends on my
> >institution being convinced to give me some kind of credit for these
> >activities. Since my contributions to the Jmol project were not
> >deemed a "form of off-campus, peer reviewed scholarly or artistic
> >product", I cannot afford to put any more time into the project. As
> >it stands, I have been told that my scholarly activity level has not
> >been adequate recently. To help me increase my scholarly output, I
> >will have to teach 3-6 hours more of classes each week, and will be
> >responsible for grading additional work from 20-60 more students.
> >Somehow that is supposed to increase my scholarly activity:) Put
> >simply, this means I will not have time to devote to Jmol or most of
> >my other scholarly activities. Since Jmol is the scholarly activity
> >that doesn't presently count, I need to drop that and use any time I
> >can eke out for scholarship of other kinds. If I can convince my
> >department to include contributions to projects like Jmol on a list
> >of creditable activity, I will be able to rejoin the project. This
> >is likely to take a semester. Thus I hope to be able to rejoin the
> >project next spring, about May.
>
> I've been presenting Axiom development at various locations, usually
> at conferences or requested talks. At almost every conference where
> I've spoken there was a later "birds of a feather" discussion. The
> primary issue is academic credit.
>
> The key problem is that the most active developers are likely to
> be doctoral or recent-degree holders, likely in tenure track positions.
> The issues seem to be that
>   (a) open source is NOT considered publishing
>   (b) code development is not considered research
>   (c) only published, peer-reviewed papers count at the tenure review.
>
> Thus, a tenure-sensitive professor who develops a great algorithm or
> program, which takes a tremendous amount of time and effort, gets no
> credit at the tenure review. Worse, since the time spent on the program
> takes away from the publications pile, it actually works against the
> possibility of tenure.
>
> Partially the problem is that computational mathematics is not yet
> considered a separate department from mathematics. Another partial
> cause of the problem is that the tenure committee is composed of
> professors who are not well aware of, or being "mathematicians",
> look down upon programming as "not really research". Yet another
> issue is that peer-review rarely, if ever, involves a peer-review
> of the code.
>
> This has come up in at least 6 venues, with a total meeting representation
> of over 40 professors from many different locations. Thus the issue is not
> some local problem but fairly systemic.
>
> Carlo Traverso, head of the Department of Mathematica, in Pisa, Italy
> and I have been looking at creating a new kind of journal to address
> this problem. The journal would accept only "literate papers", that is,
> papers which contain both the research results and the associated source
> code. The programs would be published in a peer-reviewed journal with a
> requirement that the program could be run by an independent party and
> reproduce the reported research results (similar to other sciences).
>
> While this would not address the time involved in writing and debugging
> a program, it would at least give a venue for presenting open source
> code in a reproducible, peer-reviewed (and therefore tenure-approved)
> format.

There is already such a journal, where I am going to publish some of
my opensource codes -

Computer Physics Communications:

www.sciencedirect.com/science/journal/00104655/

impact factor is around 0.6, so not big, but it still counts as a publication.

\start
Date: 25 Dec 2007 14:26:42 -0500
From: Stephen Wilson
To: list
Subject: [PATCH] fix typo in intloopReadConsole

--=-=-=

Hello,

A simple patch against Silver.  Noticed that the )fin command
no longer works:

 (1) -> )fin

    >> System error:
    The tag |top-level| is undefined.


The tag '|top-level| appears to be a typo from commit 5e31c36e.
Should be '|top_level|.


Thanks,
Steve


--=-=-=
  filename=0001-fix-typo-in-intloopReadConsole.patch

diff --git a/changelog b/changelog
index 001a035..5daec7f 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071225 sxw src/interp/bookvol5 fix typo in intloopReadConsole
 20071218 acr src/algebra/axserver.spad fix lastType output re: errors
 20071217 tpd src/algebra/variable.spad ignore regression test gensym (7041)
 20071217 tpd src/algebra/lodo.spad ignore regression test gensym (7042)
diff --git a/src/interp/bookvol5.pamphlet b/src/interp/bookvol5.pamphlet
index f2e570a..d3ebb9b 100644
--- a/src/interp/bookvol5.pamphlet
+++ b/src/interp/bookvol5.pamphlet
@@ -1006,7 +1006,7 @@ will end up as a recursive call to ourselves.
      (|intloopReadConsole| "" n))
    (setq pfx (|intloopPrefix?| ")fi" input))
    (when (and pfx (or (string= pfx ")fi") (string= pfx ")fin")))
-     (throw '|top-level| nil))
+     (throw '|top_level| nil))
    (when (and (equal b "") (setq d (|intloopPrefix?| ")" input)))
      (|setCurrentLine| d) 
      (setq c (|ncloopCommand| d n)) 

--=-=-=--

\start
Date: Tue, 25 Dec 2007 18:50:14 -0600
From: Tim Daly
To: list
Subject: 20071225.01.sxw.patch

The )fin command was broken because the throw was to the symbol top-level
when it should be to the symbol top_level. Steven Wilson submitted this
patch.


========================================================================
diff --git a/changelog b/changelog
index 001a035..01b91c6 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071225 sxw src/interp/bookvol5 fix top-level typo
 20071218 acr src/algebra/axserver.spad fix lastType output re: errors
 20071217 tpd src/algebra/variable.spad ignore regression test gensym (7041)
 20071217 tpd src/algebra/lodo.spad ignore regression test gensym (7042)
diff --git a/src/interp/bookvol5.pamphlet b/src/interp/bookvol5.pamphlet
index f2e570a..d3ebb9b 100644
--- a/src/interp/bookvol5.pamphlet
+++ b/src/interp/bookvol5.pamphlet
@@ -1006,7 +1006,7 @@ will end up as a recursive call to ourselves.
      (|intloopReadConsole| "" n))
    (setq pfx (|intloopPrefix?| ")fi" input))
    (when (and pfx (or (string= pfx ")fi") (string= pfx ")fin")))
-     (throw '|top-level| nil))
+     (throw '|top_level| nil))
    (when (and (equal b "") (setq d (|intloopPrefix?| ")" input)))
      (|setCurrentLine| d) 
      (setq c (|ncloopCommand| d n)) 



\start
Date: Wed, 26 Dec 2007 15:57:43 -0600
From: Tim Daly
To: Martin Rubey, Arthur Ralfs,	Bill Page
Subject: unicode output

The current firefox-based hyperdoc has the beginnings of a notebook-style
interface to Axiom, similar to Sage's idea, albeit still in primitive form.
More work needs to be done to allow history to appear on the page but all
of the basic machinery exists.

The Axiom fonts page (the last entry in the new hyperdoc) lists 
approximately 300 unicode characters that are used in the Axiom output,
including all the greek alphabet.

The issue seems to be specifying an input syntax that allows the user
to specify unicode characters while typing formulas.

It might be reasonable to modify the input syntax to accept unicode
characters as input, either as 'Unnnn or 'Usymbolname. These would be
converted to symbol on input as usual. Output forms could recognize
the syntax. Symbol could provide a 

 unicode: % -> hexcode as in

 unicode 'Ugamma   -> &#x03B3;
 unicode 'U03B3    -> &#x03B3;
 unicode 'U&gamma; -> &#x03B3;

and unidecode: hexcode -> Symbol

 unidecode &#x03B3; -> 'Ugamma
 unidecode 03B3   -> 'Ugamma

These could be inserted inline in mathml or html output streams.
Ascii streams could output the 'Ugamma form.

>From the notebook interface it is trivial to make these substitutions
for both input and output since the commands are read and written by
the mathml algebra functions. Thus in the notebook interface the 
echo'd form of the input expression would contain greek characters
and the result expression would contain the greek characters, as in:

 'Ugamma(n) == factorial(n-1)

would echo as

 (1) -> &#x03B3(n) == factorial (n-1)

     (1) &#x03B3

which the browser would display with greek symbols.

Since Uanything is already a valid symbol most of this could be done
"by convention" for the terminal interface and it would "just work"
in the firefox notebook interface. Thus, nothing about Axiom need change.

I'll try modifying the command line page to experiment with this.

\start
Date: Thu, 27 Dec 2007 00:18:10 -0800
From: Arthur Ralfs
To: Tim Daly
Subject: mathml fixes

Tim,

I have some fixes for mathml to deal with the issues concerning
sums and products that Martin brought to my attention.  I downloaded
mathml.spad.pamphlet from the silver repository today so as to make
sure I submit a clean patch.  I noticed that there are a number of minor
differences between what you currently have in silver and what I'm
working on.  Do you want me to synchronize completely with the silver
version or just submit a patch for the sums and products things?

\start
Date: Thu, 27 Dec 2007 04:38:10 -0500
From: Tim Daly
To: Arthur Ralfs
Subject: Re: mathml fixes

>I have some fixes for mathml to deal with the issues concerning
>sums and products that Martin brought to my attention.  I downloaded
>mathml.spad.pamphlet from the silver repository today so as to make
>sure I submit a clean patch.  I noticed that there are a number of minor
>differences between what you currently have in silver and what I'm
>working on.  Do you want me to synchronize completely with the silver
>version or just submit a patch for the sums and products things?

Either would be fine, I guess. It depends on whether I understand
why you are patching something so if there is a mismatch I can
update correctly.

\start
Date: 28 Dec 2007 14:55:43 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: Close Issues -> Close Fricas Issues

Dear Bill, *

> I am not against revising the status categories so they are more specific and
> better organized but I do think it is essential that we treat all
> versions/forks of Axiom on an equal footing on the NewSynthesis Axiom
> Wiki. Doing things the way you suggest does not seem sufficiently equitable
> to me.

As some of you may have noticed, I spent some effort in getting IssueTracker up
to date, at least with respect to FriCAS.  I would now like to further pursue
this by revising the possible statuses and categories.  

My intention is to simplify as much as possible the classification process for
bug submitters.  For developers (for example, myself) it is also important to
have well classified issues, because I am sometimes in bug squashing mood, and
then I go through the bugs and look which one I think I'm able to close given
the amount of time I can spend.  Currently it takes already half an hour to
reclassify ill-classified bugs...


Thus, I ask you to comment.  I'll wait a week or so (unless I get only
encouraging comments), if I do not get any comments until then, I'll just go
ahead.  Meanwhile I'll only reclassify.  

Happy new year,

Martin

Here comes the proposal:

statuses:

I suggest to reduce the possible statuses to:

    open
    closed
    fix proposed
    rejected
    duplicate
    not reproducible
    need more info

I.e., the statuses

assigned [1], revised [0], postponed [1], planned [1], pending [6], testing [1]

should be deleted.  The issues currently listed with this status (in square
brackets the number of such issues) can all be easily reclassified.

categories:

I suggest to reduce/change the possible categories to:

    Axiom Compiler (rename to SPAD compiler)
    Axiom Library 
    Axiom Interpreter
    Axiom Documentation
    Axiom User Interface
    Axiom-Aldor Interaction
    MathAction
    lisp system

I'm not so sure what to do with:

    Axiom on Windows
    Axiom on Linux
    Axiom on MacOSX
    building Axiom from source [23]

There are indeed problems particular to MS Windows or Linux or MacOSX, but
often these are related to the build process.  On the other hand, build
troubles are often common to all platforms... The problem I have is that
sometimes submitters put bugs into Axiom on Windows even though it's really a
problem with the Algebra code.  I guess, the best thing is to keep it for now.

    Doyen CD

this could possibly be merged with Axiom User Interface



All other categories should be deleted.  Reasons:

    Aldor Library Compiler    [6]
    Aldor Standalone Compiler [2]

Aldor has its own bug-tracking system, and as long as Aldor is non-free, we
cannot merge the bug databases.

    Axiom Mathematics [28]

most of the issues in this category should be moved to Axiom Library, some to
the Axiom Interpreter.  I guess the original intention was to provide a place
to discuss problems of design, rather than programming (like, for example,
semantics of 'Fraction Fraction R' or 'Complex PF 5').  I propose to delete
this category, since it seems to confuse many users.

    general [4]

Quite superfluous.  Such issues can be sent to the mailing list, with a higher
chance of being resolved.

    Axiom Programming   [1]
    Axiom Foundation    [0]
    Donations           [0]
    Bounties            [0]
    New feature request [3]

easily reclassified.

\start
Date: Fri, 28 Dec 2007 11:47:30 -0500
From: Bill Page
To: Martin Rubey
Subject: Re: Close Issues -> Close Fricas Issues

On 28 Dec 2007 14:55:43 +0100, Martin Rubey wrote:
> Dear Bill, *
>
> > I am not against revising the status categories so they are more specific
> > and better organized but I do think it is essential that we treat all
> > versions/forks of Axiom on an equal footing on the NewSynthesis Axiom
> > Wiki. Doing things the way you suggest does not seem sufficiently
> > equitable to me.
>
> As some of you may have noticed, I spent some effort in getting IssueTracker
> up to date, at least with respect to FriCAS.  I would now like to further pursue
> this by revising the possible statuses and categories.

Thanks, Martin. I really appreciate your work on this!

>
> My intention is to simplify as much as possible the classification process
> for bug submitters.  For developers (for example, myself) it is also important
> to have well classified issues, because I am sometimes in bug squashing
> mood, and then I go through the bugs and look which one I think I'm able to
> close given the amount of time I can spend.  Currently it takes already half
> an hour to reclassify ill-classified bugs...
>

I agree.

>
> Thus, I ask you to comment.  I'll wait a week or so (unless I get only
> encouraging comments), if I do not get any comments until then, I'll
> just go ahead.

If you need any technical help changing the list of categories just
let me know. (You will find the list of categories under the
properties tab in the mathaction folder in the Zope management
interface.)

> Meanwhile I'll only reclassify.
>

Ok.

>
> Here comes the proposal:
>
> statuses:
>
> I suggest to reduce the possible statuses to:
>
>     open
>     closed
>     fix proposed
>     rejected
>     duplicate
>     not reproducible
>     need more info
>
> I.e., the statuses
>
> assigned [1], revised [0], postponed [1], planned [1], pending [6],
> testing [1]
>
> should be deleted.  The issues currently listed with this status
> (in square brackets the number of such issues) can all be easily
> reclassified.
>

I agree.

> categories:
>
> I suggest to reduce/change the possible categories to:
>
>     Axiom Compiler (rename to SPAD compiler)
>     Axiom Library
>     Axiom Interpreter
>     Axiom Documentation
>     Axiom User Interface
>     Axiom-Aldor Interaction
>     MathAction
>     lisp system
>

Ok.

> I'm not so sure what to do with:
>
>     Axiom on Windows
>     Axiom on Linux
>     Axiom on MacOSX

These also would seem to interact with the new "Axiom Version" field.
Right now that field also affects work version of Axiom is run to
create the output on the page (if any). Maybe that was not a good idea
since I think it would be convenient to be able to enter "Windows and
MacOSX" here but right now there is no way to run these versions on
the mathaction (sage.math) server which is a linux system. In
principle this should be possible through a remote or virtual machine
but it might be a bit challenging.

>     building Axiom from source [23]

I believe that we should keep this one. It's use seems clear to me.

>
> There are indeed problems particular to MS Windows or Linux or MacOSX,
> but often these are related to the build process.  On the other hand, build
> troubles are often common to all platforms... The problem I have is that
> sometimes submitters put bugs into Axiom on Windows even though it's
> really a problem with the Algebra code.

I agree that as "categories" they do not make much sense.

> I guess, the best thing is to keep it for now.
>

I am not sure. But Having two fields in the issue report such as 1)
"affects what Axiom Version ..." and 2) "execute examples using Axiom
Version ..." seems confusing to me. Any other ideas?

>     Doyen CD
>
> this could possibly be merged with Axiom User Interface
>

I think it should remain separate.

>
>
> All other categories should be deleted.  Reasons:
>
>     Aldor Library Compiler    [6]
>     Aldor Standalone Compiler [2]
>
> Aldor has its own bug-tracking system, and as long as Aldor
> is non-free, we cannot merge the bug databases.
>

I do not see th license status as a problem with respect to reporting
bugs. Having duplicate bug reporting systems is a problem that we have
to live with. As a library compiler for Axiom I think it is necessary
that we categorize Axiom-related Aldor bugs here.

>     Axiom Mathematics [28]
>
> most of the issues in this category should be moved to Axiom Library,
> some to the Axiom Interpreter.  I guess the original intention was to
> provide a place to discuss problems of design, rather than programming
> (like, for example, semantics of 'Fraction Fraction R' or 'Complex PF 5').
> I propose to delete this category, since it seems to confuse many users.
>

You are right. There are other pages on the wiki where more general
issues like this can be discussed.

>     general [4]
>
> Quite superfluous.

Agreed.

> Such issues can be sent to the mailing list, with a higher chance of
> being resolved.
>
>     Axiom Programming   [1]
>     Axiom Foundation    [0]
>     Donations           [0]
>     Bounties            [0]

I think these can be deleted.

>     New feature request [3]
>
> easily reclassified.
>

I can imagine some good reasons why we should continue to classify
some reports as "feature requests".

\start
Date: 28 Dec 2007 18:16:05 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: Close Issues -> Close Fricas Issues

Dear Bill,

thanks for your detailed answer.  Here a summary of the points where action is
still unclear:

Bill Page writes:

> > I'm not so sure what to do with:
> >
> >     Axiom on Windows
> >     Axiom on Linux
> >     Axiom on MacOSX
> 
> These also would seem to interact with the new "Axiom Version" field.  Right
> now that field also affects work version of Axiom is run to create the output
> on the page (if any). Maybe that was not a good idea since I think it would
> be convenient to be able to enter "Windows and MacOSX" here but right now
> there is no way to run these versions on the mathaction (sage.math) server
> which is a linux system.

I don't think this is necessary.  In any case, there are more important things
to do...

> In principle this should be possible through a remote or virtual machine but
> it might be a bit challenging.
 
> > There are indeed problems particular to MS Windows or Linux or MacOSX, but
> > often these are related to the build process.  On the other hand, build
> > troubles are often common to all platforms... The problem I have is that
> > sometimes submitters put bugs into Axiom on Windows even though it's really
> > a problem with the Algebra code.
> 
> I agree that as "categories" they do not make much sense.
> 
> > I guess, the best thing is to keep it for now.
> 
> I am not sure. But Having two fields in the issue report such as 1)
> "affects what Axiom Version ..." and 2) "execute examples using Axiom
> Version ..." seems confusing to me. Any other ideas?

Encourage submitters to state what version they use.  I'm not expecting too
many bug reports from anonymous users this year, and I'm (almost) in the
position now to check bugs also on MS Windows, so I can do it unless it is a
bug within the build process.  The latter is simply too much of an effort for
me.

Maybe we should rename: "building axiom from source" to "building and
installing axiom" and delete "Axiom on Windows" and "Axiom on Linux"?

> >     Doyen CD
> >
> > this could possibly be merged with Axiom User Interface
> >
> 
> I think it should remain separate.

OK.

> > All other categories should be deleted.  Reasons:
> >
> >     Aldor Library Compiler    [6]
> >     Aldor Standalone Compiler [2]
> >
> > Aldor has its own bug-tracking system, and as long as Aldor
> > is non-free, we cannot merge the bug databases.
> >
> 
> I do not see the license status as a problem with respect to reporting
> bugs. Having duplicate bug reporting systems is a problem that we have to
> live with. As a library compiler for Axiom I think it is necessary that we
> categorize Axiom-related Aldor bugs here.

Well, that is what the new category 'Axiom-Aldor Interaction' is intended for.
Can you suggest a better name?

> >     New feature request [3]
> >
> > easily reclassified.
> >
> 
> I can imagine some good reasons why we should continue to classify some
> reports as "feature requests".

I do not understand that?  For every category we have a status "WishList".  If
there is a feature request that does not fit into any of the categories, I
guess we should revise them.

\start
Date: 29 Dec 2007 00:35:03 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: Close Issues -> Close Fricas Issues

Dear all,

Martin Rubey writes:

> Thus, I ask you to comment.  I'll wait a week or so (unless I get only
> encouraging comments), if I do not get any comments until then, I'll just go
> ahead.  Meanwhile I'll only reclassify.

In a wave of madness I did all the changes, no longer waiting for comments.
I'll try to handle complaints as well as I can, please bear with me.

Find below a list of issues where I have no idea of the proper status.  Often
the main problem is that I do not understand what the bug is.

I'm going to sleep now...

> Happy new year,
> 
> Martin


110, 226, 378, 107, 112, 136, 302, 39, 17, 187, 228

Waldek, Gaby: is 370 fixed in FriCAS, open-axiom?  (I do not even know what the
bug is.

\start
Date: Fri, 28 Dec 2007 15:57:17 -0800 (PST)
From: Tim Daly
To: sage-devel <sage-devel@googlegroups.com>
Subject: Rosetta translations

At <http://daly.axiom-developer.org/rosetta.pdf> is a document that is
designed to help users of new systems "translate" simple ideas from
their current systems.  (The source is at
<http://daly.axiom-developer.org/rosetta.tex>). I do not know Sage
well enough to update this information. Is there anyone here who can
propose Sage equivalent commands so they can be added to the document?
It should only take a few minutes for an experienced Sage user.

Please send me email or post an updated version of the document
somewhere.

Such a translation would be a trivial introduction to Sage and could
be added to the distribution.

\start
Date: Fri, 28 Dec 2007 19:15:37 -0500
From: David Joyner
To: Tim Daly
Subject: Re: Rosetta translations

I think this is a great idea.

What distribution license does the rosetta tex file have?


On 12/28/07, Tim Daly wrote:

> At <http://daly.axiom-developer.org/rosetta.pdf> is a document that
> is designed to help users of new systems "translate" simple ideas
> from their current systems.  (The source is at
> <http://daly.axiom-developer.org/rosetta.tex>). I do not know Sage
> well enough to update this information. Is there anyone here who can
> propose Sage equivalent commands so they can be added to the
> document?  It should only take a few minutes for an experienced Sage
> user.

> Please send me email or post an updated version of the document
> somewhere.

> Such a translation would be a trivial introduction to Sage and could
> be added to the distribution.

\start
Date: Fri, 28 Dec 2007 21:22:10 -0500
From: Tim Daly
To: David Joyner
Subject: Re: Rosetta translations

>I think this is a great idea.
>
>What distribution license does the rosetta tex file have?

Modified BSD.

I'd like Sage to be in the list so people from other systems
can have a clue what form they might type in Sage to get
similar results.

\start
Date: Sat, 29 Dec 2007 17:21:16 -0800
From: Arthur Ralfs
To: Tim Daly
Subject: mathml sums and products patch

Tim,

This patch fixes some ambiguities in the display of sums and
products brought to my attention by Martin.  It doesn't bring the
silver version of mathml into sync with what I have.  I'll leave that
possibly for later.

The problems can be seen in the output from the following commands:

1. summation(i^2,i=a..b)^(d-c)
2. summation(i^2^(d-c),i=a..b)
3. sum(operator(f)(i)+1,i=1..n)
4. sum(operator(f)(i),i=1..n)+1
5. sum(operator(f)(i)+1,i=1..n)^3

Note to Waldek if you notice this:  since the mathml code in Axiom and
 FriCAS has already diverged I'll be issuing a separate patch for FriCAS
shortly.

--------------000602070606010508050503
 name="mathml.spad.pamphlet.sums-products.patch"
 filename="mathml.spad.pamphlet.sums-products.patch"

--- mathml.spad.pamphlet	2007-12-26 13:49:34.000000000 -0800
+++ mathml.spad.pamphlet.new	2007-12-29 12:14:36.000000000 -0800
@@ -1011,10 +1011,10 @@
     formatSuperSub(expr : E, args : L E, opPrec : I) : S ==
       -- this produces prime notation ordinary derivatives.
       -- first have to divine the semantics, add cases as needed
-      WriteLine$Lisp "SuperSub1 begin"
+--      WriteLine$Lisp "SuperSub1 begin"
       atomE : L E := atomize(expr)      
       op : S := stringify first atomE
-      WriteLine$Lisp "op: "op
+--      WriteLine$Lisp "op: "op
       op ^= "SUPERSUB" => _
           "<mtext>Mistake in formatSuperSub: no SUPERSUB1</mtext>"
       #args ^= 1 => "<mtext>Mistake in SuperSub1: #args <> 1</mtext>"
@@ -1024,9 +1024,9 @@
       -- {{{SUPERSUB}{y}{ }{,,}}{x}}, expr is the first {} and args is the
       -- {x}
       funcS : S := stringify first rest atomE
-      WriteLine$Lisp "funcS: "funcS
+--      WriteLine$Lisp "funcS: "funcS
       bvarS : S := stringify first args
-      WriteLine$Lisp "bvarS: "bvarS
+--      WriteLine$Lisp "bvarS: "bvarS
       -- count the number of commas
       commaS : S := stringify first rest rest rest atomE
       commaTest : S := ","
@@ -1035,7 +1035,7 @@
         i := i+1
 	commaTest := commaTest","
       s : S := "<msup><mi>"funcS"</mi><mrow>"
-      WriteLine$Lisp "s: "s
+--      WriteLine$Lisp "s: "s
       j : I := 0
       while j < i repeat
         s := s"<mo>&#x02032;</mo>"
@@ -1046,7 +1046,7 @@
       -- This one produces ordinary derivatives with differential notation,
       -- it needs a little more work yet.
       -- first have to divine the semantics, add cases as needed
-      WriteLine$Lisp "SuperSub begin"
+--      WriteLine$Lisp "SuperSub begin"
       atomE : L E := atomize(expr)      
       op : S := stringify first atomE
       op ^= "SUPERSUB" => _
@@ -1069,6 +1069,7 @@
       s : S := "<mfrac><mrow><msup><mo>&#x02146;</mo><mn>"string(ndiffs)"</mn></msup><mi>"funcS"</mi></mrow><mrow><mo>&#x02146;</mo><msup><mi>"formatMml(first args,minPrec)"</mi><mn>"string(ndiffs)"</mn></msup></mrow></mfrac><mo>&#x02061;</mo><mo>(</mo><mi>"formatMml(first args,minPrec)"</mi><mo>)</mo>"
 
     formatPlex(op : S, args : L E, prec : I) : S ==
+      checkarg:Boolean := false
       hold : S
       p : I := position(op,plexOps)
       p < 1 => error "unknown plex op"
@@ -1077,13 +1078,21 @@
       n : I := #args
       (n ^= 2) and (n ^= 3) => error "wrong number of arguments for plex"
       s : S :=
-        op = "SIGMA"   => "<mo>&#x02211;</mo>"
+        op = "SIGMA"   => 
+	  checkarg := true
+	  "<mo>&#x02211;</mo>"
 	-- Sum
-        op = "SIGMA2"   => "<mo>&#x02211;</mo>"
+        op = "SIGMA2"   => 
+	  checkarg := true
+	  "<mo>&#x02211;</mo>"
 	-- Sum
-        op = "PI"      => "<mo>&#x0220F;</mo>"
+        op = "PI"      => 
+	  checkarg := true
+	  "<mo>&#x0220F;</mo>"
 	-- Product
-        op = "PI2"     => "<mo>&#x0220F;</mo>"
+        op = "PI2"     => 
+	  checkarg := true
+	  "<mo>&#x0220F;</mo>"
 	-- Product
 --        op = "INTSIGN" => "<mo>&#x0222B;</mo>"
 	-- Integral, int
@@ -1104,7 +1113,15 @@
 	  else
 	    s := concat [s,group " ","</munderover>"]
           args := rest args
-        s := concat [s,formatMml(first args,minPrec)]
+	-- if checkarg true need to test op arg for "+" at least
+	-- and wrap parentheses if so
+	if checkarg then
+          la : L E := (first args pretend L E)
+          opa : S := stringify first la
+	  if opa = "+" then
+            s := concat [s,"<mo>(</mo>",formatMml(first args,minPrec),"<mo>)</mo>"]
+          else s := concat [s,formatMml(first args,minPrec)]
+        else s := concat [s,formatMml(first args,minPrec)]
       else
         hold := group concat [hold,formatMml(first args,minPrec)]
         s := concat [s,hold]
@@ -1178,7 +1195,16 @@
       p : I := position(op,binaryOps)
       p < 1 => error "unknown binary op"
       opPrec := binaryPrecs.p
-      s1 : S := formatMml(first args, opPrec)
+      -- if base op is product or sum need to add parentheses
+      if ATOM(first args)$Lisp@Boolean then
+        opa:S := stringify first args
+      else
+        la : L E := (first args pretend L E)
+        opa : S := stringify first la
+      if (opa = "SIGMA" or opa = "SIGMA2" or opa = "PI" or opa = "PI2") and op = "**" then
+        s1 : S := concat ["<mo>(</mo>",formatMml(first args, opPrec),"<mo>)</mo>"]
+      else 
+	s1 : S := formatMml(first args, opPrec)
       s2 : S := formatMml(first rest args, opPrec)
       op :=
         op = "|"     =>  s := concat ["<mrow>",s1,"</mrow><mo>",op,"</mo><mrow>",s2,"</mrow>"]
@@ -1197,6 +1223,8 @@
       group formatNaryNoGroup(op, args, prec)
 
     formatNaryNoGroup(op : S, args : L E, prec : I) : S ==
+--      WriteLine$Lisp "formatNaryNoGroup start"
+      checkargs:Boolean := false
       null args => ""
       p : I := position(op,naryOps)
       p < 1 => error "unknown nary op"
@@ -1230,20 +1258,51 @@
 	   position("ZAG",tmpS,1) > 0 => formatZag(args)
 --	   position("ZAG",tmpS,1) > 0 => formatZag1(args)
 	   concat [formatMml(first args,minPrec) "<mo>+</mo>" formatZag(rest args)]
+      -- At least for the ops "*","+","-" we need to test to see if a sigma or pi
+      -- is one of their arguments because we might need parentheses as indicated
+      -- by the problem with summation(operator(f)(i),i=1..n)+1 versus 
+      -- summation(operator(f)(i)+1,i=1..n) having identical displays as of
+      -- 2007-12-21
       op :=
         op = ","     => "<mo>,</mo>" --originally , \:
         op = ";"     => "<mo>;</mo>" --originally ; \: should figure these out
-        op = "*"     => "<mo>&#x02062;</mo>"
+        op = "*"     =>
+	    checkargs := true
+	    "<mo>&#x02062;</mo>"
 	-- InvisibleTimes
         op = " "     => "<mspace width='0.5em'/>"
         op = "ROW"   => "</mtd><mtd>"
-	op = "+"     => "<mo>+</mo>"
-	op = "-"     => "<mo>-</mo>"
+	op = "+"     => 
+	    checkargs := true
+	    "<mo>+</mo>"
+	op = "-"     => 
+	    checkargs := true
+	    "<mo>-</mo>"
         op
       l : L S := nil
       opPrec := naryPrecs.p
+      -- if checkargs is true check each arg except last one to see if it's
+      -- a sigma or pi and if so add parentheses. Other op's may have to be
+      -- checked for in future
+      count:I := 1
       for a in args repeat
-        l := concat(op,concat(formatMml(a,opPrec),l)$L(S))$L(S)
+--        WriteLine$Lisp "checking args"
+        if checkargs then
+	  if count < #args then
+	    -- check here for sum or product
+	    if ATOM(a)$Lisp@Boolean then
+	      opa:S := stringify a
+	    else
+	      la : L E := (a pretend L E)
+	      opa : S := stringify first la
+--            la : L E := (a pretend L E)
+--            opa : S := stringify first la
+	    if opa = "SIGMA" or opa = "SIGMA2" or opa = "PI" or opa = "PI2" then
+	      l := concat(op,concat(concat ["<mo>(</mo>",formatMml(a,opPrec),"<mo>)</mo>"],l)$L(S))$L(S)
+	    else l := concat(op,concat(formatMml(a,opPrec),l)$L(S))$L(S)
+	  else l := concat(op,concat(formatMml(a,opPrec),l)$L(S))$L(S)
+	else l := concat(op,concat(formatMml(a,opPrec),l)$L(S))$L(S)
+	count := count + 1
       s : S := concat reverse rest l
       opPrec < prec => parenthesize s
       s

--------------000602070606010508050503--

\start
Date: Sat, 29 Dec 2007 20:23:46 -0600
From: Tim Daly
To: list
Subject: 20071229.01.jap.patch (7054)

This patch from Alfredo Portes removes hardcoded paths from several
hyperdoc firefox web pages. This fixes bug 7054.

Tim

===========================================================================
diff --git a/changelog b/changelog
index 812a22f..84a01e3 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071229 jap src/hyper/bookvol11 remove /home/silver path (bug 7054)
 20071228 tpd src/hyper/bookvol11 add standards compliance for gamma
 20071228 tpd src/hyper/bitmaps/gammacomplexinverse.png added
 20071228 tpd src/hyper/bitmaps/gammacomplex.png added
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index bd004ea..3a73f1c 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -3598,7 +3598,7 @@ abstract algebra
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/bcmatrix.xhtml">
+     <a href="bcmatrix.xhtml">
       <b>Matrix</b>
      </a>
     </td>
@@ -3643,12 +3643,12 @@ abstract algebra
  <body>
 <<page head>>
    What kind of limit do you want to compute?:<br/>
-   <a href="/home/silver/reallimit.xhtml">
+   <a href="reallimit.xhtml">
     <b>A real limit</b>
    </a><br/>
    The limit as the variable approaches a real value along the real axis
    <br/><br/>
-   <a href="/home/silver/complexlimit.xhtml">
+   <a href="complexlimit.xhtml">
     <b>A complex limit</b>
    </a><br/>
    The limit as the variable approaches a complex value along any path in
@@ -3960,24 +3960,24 @@ Enter the size of the matrix:
   <table>
    <tr>
     <td>
-     <a href="/home/silver/differentiate.xhtml">
+     <a href="differentiate.xhtml">
       <b>Differentiate</b>
      </a>
     </td>
    </tr>
    <tr>
-    <td><a href="/home/silver/indefiniteintegral.xhtml">
+    <td><a href="indefiniteintegral.xhtml">
       <b>Do an Indefinite Integral</b></a></td>
    </tr>
    <tr>
-    <td><a href="/home/silver/definiteintegral.xhtml">
+    <td><a href="definiteintegral.xhtml">
      <b>Do a Definite Integral</b></a></td>
    </tr>
    <tr>
     <td><a href="basiclimit.xhtml"><b>Find a limit</b></a></td>
    </tr>
    <tr>
-    <td><a href="/home/silver/summation.xhtml">
+    <td><a href="summation.xhtml">
       <b>Do a summation</b>
      </a>
     </td>
@@ -30127,7 +30127,7 @@ The fourth column is the difference of Axiom's value and the Handbook value.
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/draw2donevariable.xhtml">
+     <a href="draw2donevariable.xhtml">
       A function of one variable
      </a>
     </td>
@@ -30137,7 +30137,7 @@ The fourth column is the difference of Axiom's value and the Handbook value.
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/draw2ddefinedcurve.xhtml">
+     <a href="draw2ddefinedcurve.xhtml">
       A parametrically defined curve
      </a>
     </td>
@@ -30147,7 +30147,7 @@ The fourth column is the difference of Axiom's value and the Handbook value.
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/draw2dpolynomialequation.xhtml">
+     <a href="draw2dpolynomialequation.xhtml">
       A solution to a polynomial equation
      </a>
     </td>
@@ -30168,7 +30168,7 @@ The fourth column is the difference of Axiom's value and the Handbook value.
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/draw3dtwovariable.xhtml">
+     <a href="draw3dtwovariable.xhtml">
       A function of two variable
      </a>
     </td>
@@ -30178,7 +30178,7 @@ The fourth column is the difference of Axiom's value and the Handbook value.
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/draw3ddefinedtube.xhtml">
+     <a href="draw3ddefinedtube.xhtml">
       A parametrically defined tube
      </a>
     </td>
@@ -30188,7 +30188,7 @@ The fourth column is the difference of Axiom's value and the Handbook value.
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/draw3ddefinedsurface.xhtml">
+     <a href="draw3ddefinedsurface.xhtml">
       A parametrically defined surface
      </a>
     </td>
@@ -41617,7 +41617,7 @@ Additional information sources:
   <table>
    <tr>
     <td>
-     <a href="/home/silver/commandline.xhtml">
+     <a href="commandline.xhtml">
       <b>Any Command</b>
      </a>
     </td>
@@ -41718,7 +41718,7 @@ Additional information sources:
   <table>
    <tr>
     <td width="100">
-     <a href="/home/silver/seriesexpand.xhtml">
+     <a href="seriesexpand.xhtml">
       <b>Expansion</b>
      </a>
     </td>
@@ -41728,7 +41728,7 @@ Additional information sources:
    </tr>
    <tr>
     <td width="100">
-     <a href="/home/silver/taylorseries.xhtml">
+     <a href="taylorseries.xhtml">
       <b>Taylor Series</b>
      </a>
     </td>
@@ -41740,7 +41740,7 @@ Additional information sources:
    </tr>
    <tr>
     <td width="100">
-     <a href="/home/silver/laurentseries.xhtml">
+     <a href="laurentseries.xhtml">
       <b>Laurent Series</b>
      </a>
     </td>
@@ -41751,7 +41751,7 @@ Additional information sources:
    </tr>
    <tr>
     <td width="100">
-     <a href="/home/silver/puiseuxseries.xhtml">
+     <a href="puiseuxseries.xhtml">
       <b>Puiseux Series</b>
      </a>
     </td>
@@ -41823,28 +41823,28 @@ Additional information sources:
   <table>
    <tr>
     <td>
-     <a href="/home/silver/solvelinearequations.xhtml">
+     <a href="solvelinearequations.xhtml">
       A System of Linear Equations in equation form
      </a>
     </td>
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/solvelinearmatrix.xhtml">
+     <a href="solvelinearmatrix.xhtml">
       A System of Linear Equations in matrix form
      </a>
     </td>
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/solvesystempolynomials.xhtml">
+     <a href="solvesystempolynomials.xhtml">
       A System of Polynomial Equations
      </a>
     </td>
    </tr>
    <tr>
     <td>
-     <a href="/home/silver/solvesinglepolynomial.xhtml">
+     <a href="solvesinglepolynomial.xhtml">
       A Single Polynomial Equation
      </a>
     </td>


\start
Date: Fri, 28 Dec 2007 21:10:23 -0600
From: Tim Daly
To: list
Subject: 20071228.01.tpd.patch

These are newly created pages for the new hyperdoc browser.

They are the first pages in the Computer Algebra Test Suite
branch under Topics.

This is hand-written mathml, generated from scratch, so there
might be some mistakes. Further efforts will involve connecting
the pages to the supporting algebra pamphlets and developing a new
CATS set of packages for Axiom.

You'll need to check the Fonts link to ensure you have all of
the required fonts installed. There is a bug in Firefox which
shows up as a failure to stretch absolute value bars.

Tim


==========================
==========================
=====================
diff --git a/changelog b/changelog
index 01b91c6..812a22f 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20071228 tpd src/hyper/bookvol11 add standards compliance for gamma
+20071228 tpd src/hyper/bitmaps/gammacomplexinverse.png added
+20071228 tpd src/hyper/bitmaps/gammacomplex.png added
+20071228 tpd src/hyper/bitmaps/gammareal3.png added
+20071228 tpd src/hyper/bitmaps/psi.png added
+20071228 tpd src/hyper/bitmaps/loggamma.png added
 20071225 sxw src/interp/bookvol5 fix top-level typo
 20071218 acr src/algebra/axserver.spad fix lastType output re: errors
 20071217 tpd src/algebra/variable.spad ignore regression test gensym (70=
41)
diff --git a/src/hyper/bitmaps/gammacomplex.png b/src/hyper/bitmaps/gamma=
complex.png
new file mode 100644
index 0000000..cac4afd
Binary files /dev/null and b/src/hyper/bitmaps/gammacomplex.png differ
diff --git a/src/hyper/bitmaps/gammacomplexinverse.png b/src/hyper/bitmap=
s/gammacomplexinverse.png
new file mode 100644
index 0000000..2ba6b6e
Binary files /dev/null and b/src/hyper/bitmaps/gammacomplexinverse.png di=
ffer
diff --git a/src/hyper/bitmaps/gammareal3.png b/src/hyper/bitmaps/gammare=
al3.png
new file mode 100644
index 0000000..55be8e5
Binary files /dev/null and b/src/hyper/bitmaps/gammareal3.png differ
diff --git a/src/hyper/bitmaps/loggamma.png b/src/hyper/bitmaps/loggamma.=
png
new file mode 100644
index 0000000..bff7e62
Binary files /dev/null and b/src/hyper/bitmaps/loggamma.png differ
diff --git a/src/hyper/bitmaps/psi.png b/src/hyper/bitmaps/psi.png
new file mode 100644
index 0000000..275035c
Binary files /dev/null and b/src/hyper/bitmaps/psi.png differ
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index 295ffe0..bd004ea 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -414,6 +414,32 @@ PAGES=rootpage.xhtml \
           aldorusersguidepage.xhtml \
           foundationlibrarydocpage.xhtml \
           topicspage.xhtml \
+            cats.xhtml \
+            dlmf.xhtml \
+            dlmfapproximations.xhtml \
+            dlmfasymptoticexpansions.xhtml \
+            dlmfbarnesgfunction.xhtml \
+            dlmfbetafunction.xhtml \
+            dlmfcontinuedfractions.xhtml \
+            dlmfdefinitions.xhtml \
+            dlmffunctionrelations.xhtml \
+            dlmfgraphics.xhtml \
+            dlmfinequalities.xhtml \
+            dlmfinfiniteproducts.xhtml \
+            dlmfintegrals.xhtml \
+            dlmfintegralrepresentations.xhtml \
+            dlmfmathematicalapplications.xhtml \
+            dlmfmethodsofcomputation.xhtml \
+            dlmfmultidimensionalintegral.xhtml \
+            dlmfnotation.xhtml \
+            dlmfphysicalapplications.xhtml \
+            dlmfpolygammafunctions.xhtml \
+            dlmfqgammaandbetafunctions.xhtml \
+            dlmfseriesexpansions.xhtml \
+            dlmfsums.xhtml \
+            dlmfsoftware.xhtml \
+            dlmfspecialvaluesandextrema.xhtml \
+            dlmftables.xhtml \
           uglangpage.xhtml \
           examplesexposedpage.xhtml \
           ugsyscmdpage.xhtml \
@@ -878,7 +904,8 @@ the javascript can be added easily.
 <<standard head>>=
 <?xml version="1.0" encoding="UTF-8"?>
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:xlink="http://www.w3.org/1999/xlink">
+      xmlns:xlink="http://www.w3.org/1999/xlink"
+      xmlns:m="http://www.w3.org/1998/Math/MathML">
  <head>
   <meta http-equiv="Content-Type" content="text/html" charset="us-=
ascii"/>
   <title>Axiom Documentation</title>
@@ -1172,6 +1199,350 @@ is currently ignored.
   <th align="left">Name</th>
  </tr>
  <tr valign="top">
+  <td>&#x00391;</td>
+  <td>913</td>
+  <td>00391</td>
+  <td>&amp;Alpha;</td>
+  <td>greek capital letter alpha</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00392;</td>
+  <td>914</td>
+  <td>00392</td>
+  <td>&amp;Beta;</td>
+  <td>greek capital letter beta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00393;</td>
+  <td>915</td>
+  <td>00393</td>
+  <td>&amp;Gamma;</td>
+  <td>greek capital letter gamma</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00394;</td>
+  <td>916</td>
+  <td>00394</td>
+  <td>&amp;Delta;</td>
+  <td>greek capital letter delta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00395;</td>
+  <td>917</td>
+  <td>00395</td>
+  <td>&amp;Epsilon;</td>
+  <td>greek capital letter epsilon</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00396;</td>
+  <td>918</td>
+  <td>00396</td>
+  <td>&amp;Zeta;</td>
+  <td>greek capital letter zeta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00397;</td>
+  <td>919</td>
+  <td>00397</td>
+  <td>&amp;Eta;</td>
+  <td>greek capital letter eta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00398;</td>
+  <td>920</td>
+  <td>00398</td>
+  <td>&amp;Theta;</td>
+  <td>greek capital letter theta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x00399;</td>
+  <td>921</td>
+  <td>00399</td>
+  <td>&amp;Iota;</td>
+  <td>greek capital letter iota</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0039A;</td>
+  <td>922</td>
+  <td>0039A</td>
+  <td>&amp;Kappa;</td>
+  <td>greek capital letter kappa</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0039B;</td>
+  <td>923</td>
+  <td>0039B</td>
+  <td>&amp;Lambda;</td>
+  <td>greek capital letter lambda</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0039C;</td>
+  <td>924</td>
+  <td>0039C</td>
+  <td>&amp;Mu;</td>
+  <td>greek capital letter mu</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0039D;</td>
+  <td>925</td>
+  <td>0039D</td>
+  <td>&amp;Nu;</td>
+  <td>greek capital letter nu</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0039E;</td>
+  <td>926</td>
+  <td>0039E</td>
+  <td>&amp;Xi;</td>
+  <td>greek capital letter xi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0039F;</td>
+  <td>927</td>
+  <td>0039F</td>
+  <td>&amp;Omicron;</td>
+  <td>greek capital letter omicron</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A0;</td>
+  <td>928</td>
+  <td>003A0</td>
+  <td>&amp;Pi;</td>
+  <td>greek capital letter pi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A1;</td>
+  <td>929</td>
+  <td>003A1</td>
+  <td>&amp;Rho;</td>
+  <td>greek capital letter rho</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A3;</td>
+  <td>931</td>
+  <td>003A3</td>
+  <td>&amp;Sigma;</td>
+  <td>greek capital letter sigma</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A4;</td>
+  <td>932</td>
+  <td>003A4</td>
+  <td>&amp;Tau;</td>
+  <td>greek capital letter tau</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A5;</td>
+  <td>933</td>
+  <td>003A5</td>
+  <td>&amp;Upsilon;</td>
+  <td>greek capital letter upsilon</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A6;</td>
+  <td>934</td>
+  <td>003A6</td>
+  <td>&amp;Phi;</td>
+  <td>greek capital letter phi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A7;</td>
+  <td>935</td>
+  <td>003A7</td>
+  <td>&amp;Chi;</td>
+  <td>greek capital letter chi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A8;</td>
+  <td>936</td>
+  <td>003A8</td>
+  <td>&amp;Psi;</td>
+  <td>greek capital letter psi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003A9;</td>
+  <td>937</td>
+  <td>003A9</td>
+  <td>&amp;Omega;</td>
+  <td>greek capital letter omega</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B1;</td>
+  <td>945</td>
+  <td>003B1</td>
+  <td>&amp;alpha;</td>
+  <td>greek small letter alpha</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B2;</td>
+  <td>946</td>
+  <td>003B2</td>
+  <td>&amp;beta;</td>
+  <td>greek small letter beta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B3;</td>
+  <td>947</td>
+  <td>003B3</td>
+  <td>&amp;gamma;</td>
+  <td>greek small letter gamma</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B4;</td>
+  <td>948</td>
+  <td>003B4</td>
+  <td>&amp;delta;</td>
+  <td>greek small letter delta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B5;</td>
+  <td>949</td>
+  <td>003B5</td>
+  <td>&amp;epsilon;</td>
+  <td>greek small letter epsilon</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B6;</td>
+  <td>950</td>
+  <td>003B6</td>
+  <td>&amp;zeta;</td>
+  <td>greek small letter zeta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B7;</td>
+  <td>951</td>
+  <td>003B7</td>
+  <td>&amp;eta;</td>
+  <td>greek small letter eta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B8;</td>
+  <td>952</td>
+  <td>003B8</td>
+  <td>&amp;theta;</td>
+  <td>greek small letter theta</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003B9;</td>
+  <td>953</td>
+  <td>003B9</td>
+  <td>&amp;iota;</td>
+  <td>greek small letter iota</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003BA;</td>
+  <td>954</td>
+  <td>003BA</td>
+  <td>&amp;kappa;</td>
+  <td>greek small letter kappa</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003BB;</td>
+  <td>955</td>
+  <td>003BB</td>
+  <td>&amp;lambda;</td>
+  <td>greek small letter lambda</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003BC;</td>
+  <td>956</td>
+  <td>003BC</td>
+  <td>&amp;mu;</td>
+  <td>greek small letter mu</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003BD;</td>
+  <td>957</td>
+  <td>003BD</td>
+  <td>&amp;nu;</td>
+  <td>greek small letter nu</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003BE;</td>
+  <td>958</td>
+  <td>003BE</td>
+  <td>&amp;xi;</td>
+  <td>greek small letter xi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003BF;</td>
+  <td>959</td>
+  <td>003BF</td>
+  <td>&amp;omicron;</td>
+  <td>greek small letter omicron</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C0;</td>
+  <td>960</td>
+  <td>003C0</td>
+  <td>&amp;pi;</td>
+  <td>greek small letter pi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C1;</td>
+  <td>961</td>
+  <td>003C1</td>
+  <td>&amp;rho;</td>
+  <td>greek small letter rho</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C2;</td>
+  <td>962</td>
+  <td>003C2</td>
+  <td>&amp;sigmaf;</td>
+  <td>greek small letter final sigma</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C3;</td>
+  <td>963</td>
+  <td>003C3</td>
+  <td>&amp;sigma;</td>
+  <td>greek small letter sigma</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C4;</td>
+  <td>964</td>
+  <td>003C4</td>
+  <td>&amp;tau;</td>
+  <td>greek small letter tau</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C5;</td>
+  <td>965</td>
+  <td>003C5</td>
+  <td>&amp;upsilon;</td>
+  <td>greek small letter upsilon</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C6;</td>
+  <td>966</td>
+  <td>003C6</td>
+  <td>&amp;phi;</td>
+  <td>greek small letter phi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C7;</td>
+  <td>967</td>
+  <td>003C7</td>
+  <td>&amp;chi;</td>
+  <td>greek small letter chi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C8;</td>
+  <td>968</td>
+  <td>003C8</td>
+  <td>&amp;psi;</td>
+  <td>greek small letter psi</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x003C9;</td>
+  <td>969</td>
+  <td>003C9</td>
+  <td>&amp;omega;</td>
+  <td>greek small letter omega</td>
+ </tr>
+ <tr><td>----</td><td>----</td><td>----</td><td>----</td><td>----</td></=
tr>
+ <tr valign="top">
   <td>&#x000AF;</td>
   <td>175</td>
   <td>000AF</td>
@@ -1179,6 +1550,20 @@ is currently ignored.
   <td>macron</td>
  </tr>
  <tr valign="top">
+  <td>&#x000B1;</td>
+  <td>177</td>
+  <td>000B1</td>
+  <td>&amp;plusmn;</td>
+  <td>plus-or-minus sign</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x000D7;</td>
+  <td>215</td>
+  <td>000D7</td>
+  <td></td>
+  <td>multiplication sign</td>
+ </tr>
+ <tr valign="top">
   <td>&#x000E8;</td>
   <td>232</td>
   <td>000E8</td>
@@ -1207,6 +1592,13 @@ is currently ignored.
   <td>horizontal ellipsis</td>
  </tr>
  <tr valign="top">
+  <td>&#x022EF;</td>
+  <td>8943</td>
+  <td>022EF</td>
+  <td></td>
+  <td>midline horizontal ellipsis</td>
+ </tr>
+ <tr valign="top">
   <td>&#x02032;</td>
   <td>8242</td>
   <td>02032</td>
@@ -1228,6 +1620,83 @@ is currently ignored.
   <td>invisible times</td>
  </tr>
  <tr valign="top">
+  <td>&#x02102;</td>
+  <td>8450</td>
+  <td>02102</td>
+  <td></td>
+  <td>doube-struck captial c</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0210D;</td>
+  <td>8461</td>
+  <td>0210D</td>
+  <td></td>
+  <td>double-struck captial h</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x02111;</td>
+  <td>8465</td>
+  <td>02111</td>
+  <td>&amp;image;</td>
+  <td>black-letter captial i</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x02113;</td>
+  <td>8467</td>
+  <td>02113</td>
+  <td></td>
+  <td>script small l</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x02115;</td>
+  <td>8469</td>
+  <td>02115</td>
+  <td></td>
+  <td>double-struck captial n</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x02119;</td>
+  <td>8473</td>
+  <td>02119</td>
+  <td></td>
+  <td>double-struck captial p</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0211A;</td>
+  <td>8474</td>
+  <td>0211A</td>
+  <td></td>
+  <td>double-struck captial q</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0211C;</td>
+  <td>8476</td>
+  <td>0211C</td>
+  <td>&amp;real;</td>
+  <td>black-letter captial r</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x0211D;</td>
+  <td>8477</td>
+  <td>0211D</td>
+  <td></td>
+  <td>double-struck captial r</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x02124;</td>
+  <td>8484</td>
+  <td>02124</td>
+  <td></td>
+  <td>double-struck captial z</td>
+ </tr>
+ <tr valign="top">
+  <td>&#x02145;</td>
+  <td>8517</td>
+  <td>02145</td>
+  <td></td>
+  <td>doube-struck captial d</td>
+ </tr>
+ <tr valign="top">
   <td>&#x02146;</td>
   <td>8518</td>
   <td>02146</td>
@@ -3051,6 +3520,7 @@ is currently ignored.
 </table>
 <<page foot>>
 @
+
 \subsection{aldorusersguidepage.xhtml}
 <<aldorusersguidepage.xhtml>>=
 <<standard head>>
@@ -5272,6 +5742,31 @@ the first k 20th powers.
 <<page foot>>
 @

+\subsection{cats.xhtml}
+<<cats.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+    CATS -- Computer Algebra Test Suite
+  </div>
+<hr/>
+The Computer Algebra Test Suite is intended to show that Axiom conforms
+to various published standards. Axiom implementations of these functions
+are tested against reference publications.
+
+In order to show standards compliance we need to examine Axiom's behavio=
r
+against known good results. Where possible, these results are also teste=
d
+against other available computer algebra systems.
+
+The available test suites are:
+<ol>
+ <li><a href="dlmf.xhtml">Gamma Function</a></li>
+</ol>
+<<page foot>>
+@
+
 \subsection{commandline.xhtml}
 <<commandline.xhtml>>=
 <<standard head>>
@@ -9256,6 +9751,20361 @@ the operations will have extra ones added at so=
me stage.
 <<page foot>>
 @

+\subsection{dlmf.xhtml}
+<<dlmf.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function by R. A. Askey and R. Roy
+  </div>
+  <hr/>
+<p>
+The Gamma function is an extension of the factorial function to
+real and complex numbers. For positive integers,
+<m:math display="inline">
+ <m:mi mathvariant="normal">&#x0393;</m:mi>
+ <m:mrow>
+  <m:mo>(</m:mo>
+  <m:mi>n</m:mi>
+  <m:mo>)</m:mo>
+ </m:mrow>
+ <m:mo>=</m:mo>
+ <m:mrow>
+  <m:mo>(</m:mo>
+  <m:mi>n</m:mi>
+  <m:mo>-</m:mo>
+  <m:mn>1</m:mn>
+  <m:mo>)</m:mo>
+  <m:mi mathvariant="normal">!</m:mi>
+ </m:mrow>
+</m:math>.
+</p>
+
+<p>
+These pages explore Axiom's facilities for handling the Gamma function.
+In particular we try to show that Axiom conforms to published standards.
+</p>
+<ul>
+ <li><b>Notation</b></li>
+ <ul>
+  <li><a href="dlmfnotation.xhtml">Notation</a></li>
+ </ul>
+ <li><b>Properties</b></li>
+ <ul>
+  <li><a href="dlmfdefinitions.xhtml">Definitions</a></li>
+  <li><a href="dlmfgraphics.xhtml">Graphics</a></li>
+  <li><a href="dlmfspecialvaluesandextrema.xhtml">
+       Special Values and Extrema</a></li>
+  <li><a href="dlmffunctionrelations.xhtml">Function Relations</a></li=
>
+  <li><a href="dlmfinequalities.xhtml">Inequalities</a></li>
+  <li><a href="dlmfseriesexpansions.xhtml">Series Expansions</a></li>
+  <li><a href="dlmfinfiniteproducts.xhtml">Infinite Products</a></li>
+  <li><a href="dlmfintegralrepresentations.xhtml">
+       Integral Representations</a></li>
+  <li><a href="dlmfcontinuedfractions.xhtml">Continued Fractions</a></=
li>
+  <li><a href="dlmfasymptoticexpansions.xhtml">Asymptotic Expansions</=
a></li>
+  <li><a href="dlmfbetafunction.xhtml">Beta Function</a></li>
+  <li><a href="dlmfintegrals.xhtml">Integrals</a></li>
+  <li><a href="dlmfmultidimensionalintegral.xhtml">
+       Multidimensional Integral</a></li>
+  <li><a href="dlmfpolygammafunctions.xhtml">Polygamma Functions</a></=
li>
+  <li><a href="dlmfsums.xhtml">Sums</a></li>
+  <li><a href="dlmfbarnesgfunction.xhtml">
+       Barnes <i>G</i>-Function (Double Gamma Function)</a></li>
+  <li><a href="dlmfqgammaandbetafunctions.xhtml">
+       <i>q</i>-Gamma and Beta Functions</a></li>
+ </ul>
+ <li><b>Applications</b></li>
+ <ul>
+  <li><a href="dlmfmathematicalapplications.xhtml">
+      Mathematical Applications</a></li>
+  <li><a href="dlmfphysicalapplications.xhtml">
+      Physical Applications</a></li>
+ </ul>
+ <li><b>Computation</b></li>
+ <ul>
+  <li><a href="dlmfmethodsofcomputation.xhtml">
+      Methods of Computation</a></li>
+  <li><a href="dlmftables.xhtml">Tables</a></li>
+  <li><a href="dlmfapproximations.xhtml">Approximations</a></li>
+  <li>Axiom Software</li>
+ </ul>
+</ul>
+<<page foot>>
+@
+
+\subsection{dlmfapproximations.xhtml}
+<<dlmfapproximations.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Approximations
+  </div>
+  <hr/>
+<h3>Approximations</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Rational Approximations</li>
+ <li>Expansions in Chebyshev Series</li>
+ <li>Approximations in the Complex Plane</li>
+</ul>
+
+<h4>Rational Approximations</h4>
+
+<p>
+ <a href="http://dlmf.nist.gov/Contents/bib/C#cody:1967:ca">
+  Cody and Hillstrom(1967)
+ </a> gives minimax rational approximations for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>x</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math> for the ranges
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0.5</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1.5</m:mn>
+  </m:mrow>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>1.5</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>4</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>4</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>12</m:mn>
+  </m:mrow>
+ </m:math>; precision is variable.
+ <a href="http://dlmf.nist.gov/Contents/bib/H#hart:1968:ca">
+  Hart <em>et.al.</em>(1968)
+ </a> gives minimax polynomial and rational approximations to
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>x</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math> in the intervals
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>8</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1000</m:mn>
+  </m:mrow>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>12</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1000</m:mn>
+  </m:mrow>
+ </m:math>; precision is variable.
+
+ <a href="http://dlmf.nist.gov/Contents/bib/C#cody:1973:cap">
+  Cody <em>et.al.</em>(1973)
+ </a> gives minimax rational approximations for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> for the ranges
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0.5</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>3</m:mn>
+  </m:mrow>
+ </m:math> and
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>3</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math>; precision is variable.
+</p>
+
+<p>For additional approximations see
+ <a href="http://dlmf.nist.gov/Contents/bib/H#hart:1968:ca">
+  Hart <em>et.al.</em>(1968)
+ </a>(Appendix B),
+ <a href="http://dlmf.nist.gov/Contents/bib/L#luke:1975:mfa">
+  Luke(1975)
+ </a>(pp. 22=E2=80=9323), and
+ <a href="http://dlmf.nist.gov/Contents/bib/W#weniger:2003:dig">
+  Weniger(2003)
+ </a>.
+</p>
+
+<h4>Expansions in Chebyshev Series</h4>
+
+<p>
+ <a href="http://dlmf.nist.gov/Contents/bib/L#luke:1969:sfa2">
+  Luke(1969)
+ </a>
+ gives the coefficients to 20D for the Chebyshev-series expansions of
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mn>1</m:mn>
+     <m:mo>+</m:mo>
+     <m:mi>x</m:mi>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mfrac bevelled="true">
+   <m:mn>1</m:mn>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mo>+</m:mo>
+      <m:mi>x</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mfrac>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>x</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>3</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>x</m:mi>
+      <m:mo>+</m:mo>
+      <m:mn>3</m:mn>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>x</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>3</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>, and the first six derivatives of
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>x</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>3</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> for
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>. These coefficients are reproduced in
+ <a href="http://dlmf.nist.gov/Contents/bib/L#luke:1975:mfa">
+  Luke(1975)
+ </a>.
+
+ <a href="http://dlmf.nist.gov/Contents/bib/C#clenshaw:1962:csm">
+  Clenshaw(1962)
+ </a> also gives 20D Chebyshev-series coefficients for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mn>1</m:mn>
+     <m:mo>+</m:mo>
+     <m:mi>x</m:mi>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> and its reciprocal for
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&#x2264;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>. See
+ <a href="http://dlmf.nist.gov/Contents/bib/L#luke:1975:mfa">
+  Luke(1975)
+ </a>(pp.=C2;22=E2=80=9323) for additional expansions.
+</p>
+
+<h4>Approximations in the Complex Plane</h4>
+
+<p>Rational approximations for
+ <m:math display="inline">
+  <m:mfrac bevelled="true">
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>z</m:mi>
+      <m:mo>+</m:mo>
+      <m:mn>1</m:mn>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mrow>
+    <m:mi>A</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>z</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mfrac>
+ </m:math>, where
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>A</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>z</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mfrac bevelled="true">
+      <m:mn>1</m:mn>
+      <m:mn>2</m:mn>
+     </m:mfrac>
+    </m:msup>
+    <m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mi>c</m:mi>
+       <m:mo>+</m:mo>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mi>z</m:mi>
+      <m:mo>+</m:mo>
+      <m:mn>1</m:mn>
+     </m:mrow>
+    </m:msup>
+    <m:mrow>
+     <m:mi>exp</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>c</m:mi>
+         <m:mo>+</m:mo>
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>, and approximations for
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>z</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> based on the Pad=C3=A9 approximants for two forms of the inco=
mplete
+  gamma function are in
+ <a href="http://dlmf.nist.gov/Contents/bib/L#luke:1969:sfa2">
+  Luke(1969)
+ </a>.
+ <a href="http://dlmf.nist.gov/Contents/bib/L#luke:1975:mfa">
+  Luke(1975)
+ </a>(pp.=C2;13=E2=80=9316) provides explicit rational approximations =
for
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>&#x03C8;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>z</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>+</m:mo>
+   <m:mi>&#x03B3;</m:mi>
+  </m:mrow>
+ </m:math>
+</p>
+<<page foot>>
+@
+
+\subsection{dlmfasymptoticexpansions.xhtml}
+<<dlmfasymptoticexpansions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Asymptotic Expansions
+  </div>
+  <hr/>
+<h3>Asymptotic Expansions</h3>
+
+<h6>Contents</h6>
+<ul>
+ <li>Poincar=C3=A9-Type Expansions</li>
+ <li>Error Bounds and Exponential Improvement</li>
+ <li>Ratios</li>
+</ul>
+
+<h4>Poincar=C3=A9-Type Expansions</h4>
+
+<p>As
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2192;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math> in the sector
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B4;</m:mi>
+    </m:mrow>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:none/>
+      <m:mo>&lt;</m:mo>
+      <m:mi>&#x03C0;</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<a name="equation1"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>ln</m:mi>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>-</m:mo>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:msub>
+        <m:mi>B</m:mi>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>k</m:mi>
+        </m:mrow>
+       </m:msub>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>k</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>k</m:mi>
+          </m:mrow>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mrow>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>k</m:mi>
+          </m:mrow>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<a name="equation2"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>ln</m:mi>
+      <m:mspace width="0.2em"/>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:msub>
+        <m:mi>B</m:mi>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>k</m:mi>
+        </m:mrow>
+       </m:msub>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>k</m:mi>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For the Bernoulli numbers
+ <m:math>
+  <m:msub>
+   <m:mi>B</m:mi>
+   <m:mrow>
+    <m:mn>2</m:mn>
+    <m:mi>k</m:mi>
+   </m:mrow>
+  </m:msub>
+ </m:math>,
+ Also,
+</p>
+
+<a name="equation3"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi>z</m:mi>
+      <m:mi>z</m:mi>
+     </m:msup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mi>z</m:mi>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac bevelled="true">
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x2211;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>0</m:mn>
+        </m:mrow>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:munderover>
+       <m:mfrac>
+        <m:msub>
+         <m:mi>g</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mi>k</m:mi>
+        </m:msup>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>0</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>1</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mn>12</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>2</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mn>288</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>3</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mn>139</m:mn>
+      <m:mn>51840</m:mn>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>4</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mn>571</m:mn>
+      <m:mn>24 88320</m:mn>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>5</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>1 63879</m:mn>
+     <m:mn>2090 18880</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mn>6</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>52 46819</m:mn>
+     <m:mn>7 52467 96800</m:mn>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>g</m:mi>
+     <m:mi>k</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msqrt>
+      <m:mn>2</m:mn>
+     </m:msqrt>
+     <m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mstyle displaystyle="false">
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:mstyle>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi>k</m:mi>
+     </m:msub>
+     <m:msub>
+      <m:mi>a</m:mi>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>k</m:mi>
+      </m:mrow>
+     </m:msub>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:msub>
+    <m:mi>a</m:mi>
+    <m:mn>0</m:mn>
+   </m:msub>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mn>2</m:mn>
+    </m:mfrac>
+    <m:msqrt>
+     <m:mn>2</m:mn>
+    </m:msqrt>
+   </m:mrow>
+  </m:mrow>
+ </m:math>, and
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mn>0</m:mn>
+      </m:msub>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mi>k</m:mi>
+      </m:msub>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mn>1</m:mn>
+      </m:msub>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msub>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>3</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mn>2</m:mn>
+      </m:msub>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>2</m:mn>
+       </m:mrow>
+      </m:msub>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:mfrac>
+      </m:mstyle>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mi>k</m:mi>
+      </m:msub>
+      <m:msub>
+       <m:mi>a</m:mi>
+       <m:mn>0</m:mn>
+      </m:msub>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mstyle displaystyle="false">
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mi>k</m:mi>
+      </m:mfrac>
+     </m:mstyle>
+     <m:msub>
+      <m:mi>a</m:mi>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msub>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<p>
+ <a href="http://dlmf.nist.gov/Contents/bib/W#wrench:1968:cts">
+    Wrench(1968)
+ </a> gives exact values of
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>g</m:mi>
+   <m:mi>k</m:mi>
+  </m:msub>
+ </m:math> up to
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>g</m:mi>
+   <m:mn>20</m:mn>
+  </m:msub>
+ </m:math>.
+ <a href="http://dlmf.nist.gov/Contents/bib/S#spira:1971:cot">
+  Spira(1971)
+ </a>
+ corrects errors in Wrench's results and also supplies exact and 45D val=
ues of
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>g</m:mi>
+   <m:mi>k</m:mi>
+  </m:msub>
+ </m:math> for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>21</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>22</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+    <m:mo>,</m:mo>
+    <m:mn>30</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>. For an asymptotic expansion of
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>g</m:mi>
+   <m:mi>k</m:mi>
+  </m:msub>
+ </m:math> as
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>&#x2192;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math> see
+ <a  href="http://dlmf.nist.gov/Contents/bib/B#boyd:1994:gfa">Boyd(199=
4)
+ </a>.
+</p>
+
+<p>With the same conditions
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>+</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:msqrt>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+     </m:msqrt>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>a</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:none/>
+     <m:mo>&gt;</m:mo>
+     <m:mn>0</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>b</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:none/>
+     <m:mo>&#x2208;</m:mo>
+     <m:mi mathvariant="normal">&#x2102;</m:mi>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> are both fixed, and
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>ln</m:mi>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>h</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>z</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>h</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>2</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:mrow>
+        <m:msup>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mi>k</m:mi>
+        </m:msup>
+        <m:mrow>
+         <m:msub>
+          <m:mi>B</m:mi>
+          <m:mi>k</m:mi>
+         </m:msub>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mi>h</m:mi>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>h</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:none/>
+      <m:mo>&#x2208;</m:mo>
+      <m:mrow>
+      <m:mo>[</m:mo>
+      <m:mrow>
+       <m:mn>0</m:mn>
+       <m:mo>,</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>]</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> is fixed.
+</p>
+
+<p>Also as
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>y</m:mi>
+   <m:mo>&#x2192;</m:mo>
+   <m:mrow>
+    <m:mo>&#x00B1;</m:mo>
+    <m:mi mathvariant="normal">&#x221E;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>|</m:mo>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>|</m:mo>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:msqrt>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+     </m:msqrt>
+     <m:msup>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mi>y</m:mi>
+       <m:mo>|</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>x</m:mi>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mfrac bevelled="true">
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mrow>
+          <m:mo>|</m:mo>
+          <m:mi>y</m:mi>
+          <m:mo>|</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>uniformly for bounded real values of
+ <m:math display="inline">
+  <m:mi>x</m:mi>
+ </m:math>.
+</p>
+
+<h4>Error Bounds and Exponential Improvement</h4>
+
+<p>If the sums in the expansions
+(<a href="#equation1">Equation 1</a>) and
+(<a href="#equation2">Equation 2</a>) are terminated at
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mi>n</m:mi>
+    <m:mo>-</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math> (
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>) and
+ <m:math display="inline">
+  <m:mi>z</m:mi>
+ </m:math>
+is real and positive, then the remainder terms are bounded in magnitude =
by
+the first neglected terms and have the same sign. If
+ <m:math display="inline">
+  <m:mi>z</m:mi>
+ </m:math>
+is complex, then the remainder terms are bounded in magnitude by
+ <m:math display="inline">
+  <m:mrow>
+   <m:msup>
+    <m:mi>sec</m:mi>
+    <m:mrow>
+     <m:mn>2</m:mn>
+     <m:mi>n</m:mi>
+    </m:mrow>
+   </m:msup>
+   <m:mrow>
+    <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+      <m:mrow>
+       <m:mi>ph</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:math> for
+(<a href="#equation1">Equation 1</a>), and
+ <m:math display="inline">
+  <m:mrow>
+   <m:msup>
+    <m:mi>sec</m:mi>
+    <m:mrow>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mi>n</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+   </m:msup>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mn>2</m:mn>
+     </m:mfrac>
+     <m:mrow>
+      <m:mi>ph</m:mi>
+      <m:mspace width="0.2em"/>
+      <m:mi>z</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> for
+(<a href="#equation2">Equation 2</a>), times the first neglected terms=
.</p>
+
+<p>For the remainder term in
+(<a href="#equation3">Equation 3</a>) write
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi>z</m:mi>
+      <m:mi>z</m:mi>
+     </m:msup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mi>z</m:mi>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac bevelled="true">
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msup>
+     <m:mrow>
+       <m:mo>(</m:mo>
+      <m:mrow>
+        <m:mrow>
+        <m:munderover>
+         <m:mo movablelimits="false">&#x2211;</m:mo>
+          <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>=</m:mo>
+          <m:mn>0</m:mn>
+         </m:mrow>
+         <m:mrow>
+          <m:mi>K</m:mi>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:munderover>
+        <m:mfrac>
+         <m:msub>
+          <m:mi>g</m:mi>
+          <m:mi>k</m:mi>
+          </m:msub>
+         <m:msup>
+          <m:mi>z</m:mi>
+          <m:mi>k</m:mi>
+          </m:msup>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:msub>
+         <m:mi>R</m:mi>
+         <m:mi>K</m:mi>
+        </m:msub>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mi>z</m:mi>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>K</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>1</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>3</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<p>Then
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>|</m:mo>
+     <m:mrow>
+      <m:msub>
+       <m:mi>R</m:mi>
+       <m:mi>K</m:mi>
+      </m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>|</m:mo>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+         <m:mrow>
+          <m:mi>&#x03B6;</m:mi>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mi>K</m:mi>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mi>K</m:mi>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>&#x03C0;</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>K</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+       <m:msup>
+        <m:mrow>
+         <m:mo>|</m:mo>
+         <m:mi>z</m:mi>
+         <m:mo>|</m:mo>
+        </m:mrow>
+        <m:mi>K</m:mi>
+       </m:msup>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mo movablelimits="false">min</m:mo>
+        <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mi>sec</m:mi>
+            <m:mrow>
+             <m:mo>(</m:mo>
+             <m:mrow>
+              <m:mi>ph</m:mi>
+              <m:mspace width="0.2em"/>
+              <m:mi>z</m:mi>
+             </m:mrow>
+             <m:mo>)</m:mo>
+            </m:mrow>
+           </m:mrow>
+           <m:mo>,</m:mo>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:msup>
+             <m:mi>K</m:mi>
+             <m:mstyle scriptlevel="+1">
+             <m:mfrac>
+              <m:mn>1</m:mn>
+              <m:mn>2</m:mn>
+             </m:mfrac>
+            </m:mstyle>
+           </m:msup>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mn>2</m:mn>
+    </m:mfrac>
+    <m:mi>&#x03C0;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+
+<h4>Ratios</h4>
+
+<p>If
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>a</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:none/>
+     <m:mo>&#x2208;</m:mo>
+     <m:mi mathvariant="normal">&#x2102;</m:mi>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>b</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:none/>
+     <m:mo>&#x2208;</m:mo>
+     <m:mi mathvariant="normal">&#x2102;</m:mi>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> are fixed as
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2192;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math> in
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B4;</m:mi>
+    </m:mrow>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:none/>
+      <m:mo>&lt;</m:mo>
+      <m:mi>&#x03C0;</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>, then
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>a</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>&#x223C;</m:mo>
+    <m:msup>
+     <m:mi>z</m:mi>
+     <m:mrow>
+      <m:mi>a</m:mi>
+      <m:mo>-</m:mo>
+      <m:mi>b</m:mi>
+     </m:mrow>
+    </m:msup>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>a</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mi>z</m:mi>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:mrow>
+        <m:msub>
+         <m:mi>G</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>,</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:msup>
+        <m:mi>z</m:mi>
+        <m:mi>k</m:mi>
+       </m:msup>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>Also, with the added condition
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>b</m:mi>
+      <m:mo>-</m:mo>
+      <m:mi>a</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>a</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mrow>
+          <m:mrow>
+           <m:mi>a</m:mi>
+           <m:mo>+</m:mo>
+           <m:mi>b</m:mi>
+          </m:mrow>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:mrow>
+        <m:msub>
+         <m:mi>H</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>,</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>z</m:mi>
+          <m:mo>+</m:mo>
+          <m:mrow>
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mrow>
+              <m:mi>a</m:mi>
+              <m:mo>+</m:mo>
+              <m:mi>b</m:mi>
+             </m:mrow>
+             <m:mo>-</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>k</m:mi>
+        </m:mrow>
+       </m:msup>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>Here
+</p>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>G</m:mi>
+      <m:mn>0</m:mn>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>G</m:mi>
+      <m:mn>1</m:mn>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mn>2</m:mn>
+     </m:mfrac>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>G</m:mi>
+      <m:mn>2</m:mn>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mstyle displaystyle="true">
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>12</m:mn>
+      </m:mfrac>
+     </m:mstyle>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="true">
+       <m:mtable rowspacing="0.2ex" columnspacing="0.4em">
+        <m:mtr>
+         <m:mtd>
+          <m:mrow>
+           <m:mi>a</m:mi>
+            <m:mo>-</m:mo>
+           <m:mi>b</m:mi>
+           </m:mrow>
+          </m:mtd>
+        </m:mtr>
+         <m:mtr>
+         <m:mtd>
+          <m:mn>2</m:mn>
+          </m:mtd>
+        </m:mtr>
+       </m:mtable>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mn>3</m:mn>
+        <m:msup>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mi>a</m:mi>
+            <m:mo>+</m:mo>
+            <m:mi>b</m:mi>
+           </m:mrow>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mn>2</m:mn>
+        </m:msup>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>H</m:mi>
+      <m:mn>0</m:mn>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>H</m:mi>
+      <m:mn>1</m:mn>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="true">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>12</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mstyle displaystyle="true">
+        <m:mtable rowspacing="0.2ex" columnspacing="0.4em">
+         <m:mtr>
+          <m:mtd>
+           <m:mrow>
+            <m:mi>a</m:mi>
+            <m:mo>-</m:mo>
+            <m:mi>b</m:mi>
+           </m:mrow>
+          </m:mtd>
+         </m:mtr>
+         <m:mtr>
+          <m:mtd>
+           <m:mn>2</m:mn>
+          </m:mtd>
+         </m:mtr>
+        </m:mtable>
+       </m:mstyle>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>-</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>H</m:mi>
+      <m:mn>2</m:mn>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mstyle displaystyle="true">
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>240</m:mn>
+      </m:mfrac>
+     </m:mstyle>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="true">
+       <m:mtable rowspacing="0.2ex" columnspacing="0.4em">
+       <m:mtr>
+        <m:mtd>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+        </m:mtd>
+       </m:mtr>
+       <m:mtr>
+        <m:mtd>
+         <m:mn>4</m:mn>
+        </m:mtd>
+       </m:mtr>
+      </m:mtable>
+     </m:mstyle>
+     <m:mo>)</m:mo>
+    </m:mrow>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>+</m:mo>
+      <m:mrow>
+       <m:mn>5</m:mn>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mi>a</m:mi>
+           <m:mo>-</m:mo>
+           <m:mi>b</m:mi>
+          </m:mrow>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:msup>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>In terms of generalized Bernoulli polynomials we have for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>k</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>0</m:mn>
+     <m:mo>,</m:mo>
+     <m:mn>1</m:mn>
+     <m:mo>,</m:mo>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>G</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mtable rowspacing="0.2ex" columnspacing="0.4em">
+       <m:mtr>
+        <m:mtd>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+        </m:mtd>
+       </m:mtr>
+       <m:mtr>
+        <m:mtd>
+         <m:mi>k</m:mi>
+        </m:mtd>
+       </m:mtr>
+      </m:mtable>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:msubsup>
+       <m:mi>B</m:mi>
+       <m:mi>k</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:msubsup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>a</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>H</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mtable rowspacing="0.2ex" columnspacing="0.4em">
+       <m:mtr>
+        <m:mtd>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+        </m:mtd>
+       </m:mtr>
+       <m:mtr>
+        <m:mtd>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+        </m:mtd>
+       </m:mtr>
+      </m:mtable>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:msubsup>
+       <m:mi>B</m:mi>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>k</m:mi>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:msubsup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>a</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>c</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>0</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi>k</m:mi>
+     </m:msup>
+     <m:mfrac>
+      <m:mrow>
+       <m:msub>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>c</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>a</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>k</m:mi>
+       </m:msub>
+       <m:msub>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>c</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>k</m:mi>
+       </m:msub>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mi mathvariant="normal">!</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mrow>
+          <m:mrow>
+           <m:mi>a</m:mi>
+           <m:mo>+</m:mo>
+           <m:mi>b</m:mi>
+          </m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>k</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfbarnesgfunction.xhtml}
+<<dlmfbarnesgfunction.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Barnes G-Function (Double Gamma Function)
+  </div>
+  <hr/>
+<h3>Barnes
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">G</m:mi>
+ </m:math>-Function (Double Gamma Function)
+</h3>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>G</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>G</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>G</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>1</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>G</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>n</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>n</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>2</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>n</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>3</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>3</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>G</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mfrac bevelled="true">
+        <m:mi>z</m:mi>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:msup>
+      <m:mrow>
+       <m:mi>exp</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mrow>
+           <m:mstyle displaystyle="false">
+            <m:mfrac>
+             <m:mn>1</m:mn>
+             <m:mn>2</m:mn>
+            </m:mfrac>
+           </m:mstyle>
+           <m:mspace width="0.2em"/>
+           <m:mi>z</m:mi>
+           <m:mspace width="0.2em"/>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mi>z</m:mi>
+             <m:mo>+</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mstyle displaystyle="false">
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+          </m:mstyle>
+          <m:mi>&#x03B3;</m:mi>
+          <m:msup>
+           <m:mi>z</m:mi>
+           <m:mn>2</m:mn>
+          </m:msup>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>&#x00D7;</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>+</m:mo>
+          <m:mfrac>
+           <m:mi>z</m:mi>
+           <m:mi>k</m:mi>
+          </m:mfrac>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>k</m:mi>
+       </m:msup>
+       <m:mrow>
+        <m:mi>exp</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>z</m:mi>
+          </m:mrow>
+          <m:mo>+</m:mo>
+          <m:mfrac>
+           <m:msup>
+            <m:mi>z</m:mi>
+            <m:mn>2</m:mn>
+           </m:msup>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:mi>k</m:mi>
+           </m:mrow>
+          </m:mfrac>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>Ln</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>G</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mspace width="0.2em"/>
+        <m:mi>z</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mrow>
+         <m:mi>ln</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>&#x03C0;</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mspace width="0.2em"/>
+        <m:mi>z</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>z</m:mi>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>+</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi>Ln</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mo>+</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>0</m:mn>
+       <m:mi>z</m:mi>
+      </m:msubsup>
+      <m:mrow>
+       <m:mi>Ln</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>t</m:mi>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mspace width="0.2em"/>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>The
+ <m:math display="inline">
+  <m:mi>Ln</m:mi>
+ </m:math>'s have their principal values on the positive real axis and a=
re
+             continued via continuity.
+</p>
+
+<p>When
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2192;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math> in
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B4;</m:mi>
+    </m:mrow>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:none/>
+      <m:mo>&lt;</m:mo>
+      <m:mi>&#x03C0;</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>Ln</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>G</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>4</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mn>2</m:mn>
+        </m:msup>
+       </m:mrow>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mo>+</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mstyle displaystyle="false">
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+          </m:mstyle>
+          <m:mspace width="0.2em"/>
+          <m:mi>z</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mrow>
+            <m:mi>z</m:mi>
+            <m:mo>+</m:mo>
+            <m:mn>1</m:mn>
+           </m:mrow>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>12</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi>Ln</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+        <m:mi>A</m:mi>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:msub>
+        <m:mi>B</m:mi>
+        <m:mrow>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>2</m:mn>
+        </m:mrow>
+       </m:msub>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>k</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>k</m:mi>
+          </m:mrow>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>k</m:mi>
+          </m:mrow>
+          <m:mo>+</m:mo>
+          <m:mn>2</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+   </m:mrow>
+ </m:math>
+</div>
+
+<p>see
+<a href="http://dlmf.nist.gov/Contents/bib/F#ferreira:2001:aae">
+ Ferreira and L=C3=B3pez(2001)
+</a>. This reference also provides bounds for the error term. Here
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>B</m:mi>
+   <m:mrow>
+    <m:mrow>
+     <m:mn>2</m:mn>
+     <m:mi>k</m:mi>
+    </m:mrow>
+    <m:mo>+</m:mo>
+    <m:mn>2</m:mn>
+   </m:mrow>
+  </m:msub>
+ </m:math> is the Bernoulli number,  and
+ <m:math display="inline">
+  <m:mi>A</m:mi>
+ </m:math> is <em>Glaisher's constant</em>, given by
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>A</m:mi>
+    <m:mo>=</m:mo>
+    <m:msup>
+     <m:mi mathvariant="normal">&#x2147;</m:mi>
+     <m:mi>C</m:mi>
+    </m:msup>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>1.28242 71291 00622 63687</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>C</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munder>
+      <m:mo movablelimits="false">lim</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>&#x2192;</m:mo>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:mrow>
+     </m:munder>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mrow>
+         <m:munderover>
+          <m:mo movablelimits="false">&#x2211;</m:mo>
+          <m:mrow>
+           <m:mi>k</m:mi>
+           <m:mo>=</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mi>n</m:mi>
+         </m:munderover>
+         <m:mi>k</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mrow>
+          <m:mi>ln</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mi>k</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mstyle displaystyle="false">
+             <m:mfrac>
+              <m:mn>1</m:mn>
+              <m:mn>2</m:mn>
+             </m:mfrac>
+            </m:mstyle>
+            <m:msup>
+             <m:mi>n</m:mi>
+             <m:mn>2</m:mn>
+            </m:msup>
+           </m:mrow>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mstyle displaystyle="false">
+             <m:mfrac>
+              <m:mn>1</m:mn>
+              <m:mn>2</m:mn>
+             </m:mfrac>
+            </m:mstyle>
+            <m:mi>n</m:mi>
+           </m:mrow>
+           <m:mo>+</m:mo>
+           <m:mstyle displaystyle="false">
+            <m:mfrac>
+             <m:mn>1</m:mn>
+             <m:mn>12</m:mn>
+            </m:mfrac>
+           </m:mstyle>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mspace width="0.2em"/>
+         <m:mrow>
+          <m:mi>ln</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mi>n</m:mi>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>4</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:msup>
+         <m:mi>n</m:mi>
+         <m:mn>2</m:mn>
+        </m:msup>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi>&#x03B3;</m:mi>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>&#x03C0;</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mn>12</m:mn>
+     </m:mfrac>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi>&#x03B6;</m:mi>
+        <m:mo>&#x2032;</m:mo>
+       </m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mn>2</m:mn>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:msup>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mn>2</m:mn>
+       </m:msup>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mn>12</m:mn>
+     </m:mfrac>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:msup>
+       <m:mi>&#x03B6;</m:mi>
+       <m:mo>&#x2032;</m:mo>
+      </m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>and
+ <m:math display="inline">
+  <m:msup>
+   <m:mi>&#x03B6;</m:mi>
+   <m:mo>&#x2032;</m:mo>
+  </m:msup>
+ </m:math> is the derivative of the zeta function
+</p>
+
+<p>For Glaisher's constant see also
+ <a href="http://dlmf.nist.gov/Contents/bib/G#greene:1982:mft">
+  Greene and Knuth(1982)
+ </a>(p.=C2;100).
+</p>
+<<page foot>>
+@
+
+\subsection{dlmfbetafunction.xhtml}
+<<dlmfbetafunction.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Beta Function
+  </div>
+  <hr/>
+<h3>Beta Function</h3>
+
+<p>In this section all fractional powers have their principal values, ex=
cept
+where noted otherwise. In the next 4 equations it is assumed
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>b</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>.
+</p>
+
+<h5>Euler's Beta Integral</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">B</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mn>1</m:mn>
+     </m:msubsup>
+     <m:msup>
+      <m:mi>t</m:mi>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>b</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>a</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>b</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mfrac bevelled="true">
+       <m:mi>&#x03C0;</m:mi>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msubsup>
+     <m:mrow>
+      <m:msup>
+       <m:mi>sin</m:mi>
+       <m:mrow>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>a</m:mi>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:mi>&#x03B8;</m:mi>
+     </m:mrow>
+     <m:mrow>
+      <m:msup>
+       <m:mi>cos</m:mi>
+       <m:mrow>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:mi>&#x03B8;</m:mi>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>&#x03B8;</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mstyle displaystyle="false">
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:mstyle>
+     <m:mrow>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>,</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi>t</m:mi>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>t</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+      </m:msup>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">B</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mn>1</m:mn>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi>t</m:mi>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>b</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>t</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+      </m:msup>
+     </m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>,</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>a</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi>z</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>with
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mi>&#x03C0;</m:mi>
+  </m:mrow>
+ </m:math> and the integration path along the real axis.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mfrac bevelled="true">
+       <m:mi>&#x03C0;</m:mi>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msubsup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>cos</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi>cos</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>b</m:mi>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mi>&#x03C0;</m:mi>
+      <m:msup>
+       <m:mn>2</m:mn>
+       <m:mi>a</m:mi>
+      </m:msup>
+     </m:mfrac>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mrow>
+        <m:mi mathvariant="normal">B</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mi>a</m:mi>
+             <m:mo>+</m:mo>
+             <m:mi>b</m:mi>
+             <m:mo>+</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>,</m:mo>
+          <m:mrow>
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mrow>
+              <m:mi>a</m:mi>
+              <m:mo>-</m:mo>
+              <m:mi>b</m:mi>
+             </m:mrow>
+             <m:mo>+</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi>&#x03C0;</m:mi>
+     </m:msubsup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>sin</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+       <m:mi>b</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mi>&#x03C0;</m:mi>
+      <m:msup>
+       <m:mn>2</m:mn>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+     </m:mfrac>
+     <m:mfrac>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mfrac bevelled="true">
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:msup>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mrow>
+        <m:mi mathvariant="normal">B</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mi>a</m:mi>
+             <m:mo>+</m:mo>
+             <m:mi>b</m:mi>
+             <m:mo>+</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>,</m:mo>
+          <m:mrow>
+           <m:mfrac>
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mrow>
+              <m:mi>a</m:mi>
+              <m:mo>-</m:mo>
+              <m:mi>b</m:mi>
+             </m:mrow>
+             <m:mo>+</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi>cosh</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>b</m:mi>
+         <m:mi>t</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>cosh</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mi>t</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>a</m:mi>
+       </m:mrow>
+      </m:msup>
+     </m:mfrac>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mn>4</m:mn>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>,</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>-</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x211C;</m:mi>
+     <m:mi>b</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:mfrac>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mrow>
+        <m:msup>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>w</m:mi>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mi>a</m:mi>
+        </m:msup>
+        <m:msup>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mo>-</m:mo>
+           <m:mrow>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mi>b</m:mi>
+        </m:msup>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>w</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>-</m:mo>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">B</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>a</m:mi>
+      <m:mo>+</m:mo>
+      <m:mi>b</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>w</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>The fractional powers have their principal values when
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>w</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>, and are continued via continuity.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mi>c</m:mi>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x221E;</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>c</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x221E;</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+        </m:mrow>
+       </m:mrow>
+      </m:msubsup>
+      <m:msup>
+       <m:mi>t</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>a</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mrow>
+      <m:mi>b</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">B</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>c</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>a</m:mi>
+      <m:mo>+</m:mo>
+      <m:mi>b</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>0</m:mn>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:msubsup>
+      <m:msup>
+       <m:mi>t</m:mi>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>t</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>b</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi>sin</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mi>&#x03C0;</m:mi>
+     </m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>,</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <!-- Need a better Axiom graphic for this
+ <img width="302" height="151" alt="" src="bitmaps/12F1.png"/> -=
->
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mi>t</m:mi>
+ </m:math>-plane. Contour for first loop integral for the beta function.
+</div>
+
+<p>In the next two equations the fractional powers are continuous on the=

+   integration paths and take their principal values at the beginning.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>a</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>0</m:mn>
+         <m:mo>+</m:mo>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:msubsup>
+      <m:msup>
+       <m:mi>t</m:mi>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mi>a</m:mi>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">B</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p> when
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>b</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math>
+  <m:mi>a</m:mi>
+ </m:math> is not an integer and the contour cuts the real axis between
+ <m:math>
+  <m:mrow>
+   <m:mo>-</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math> and the origin.
+</p>
+
+<div align="center">
+ <!-- Need a better Axiom graphic for this
+ <img width="302" height="151" alt="" src="bitmaps/12F2.png"/> -=
->
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mi>t</m:mi>
+ </m:math>-plane. Contour for second loop integral for the beta function.
+</div>
+
+<h5>Pochhammer's Integral</h5>
+<p>When
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>a</m:mi>
+    <m:mo>,</m:mo>
+    <m:mi>b</m:mi>
+   </m:mrow>
+   <m:mo>&#x2208;</m:mo>
+   <m:mi mathvariant="normal">&#x2102;</m:mi>
+  </m:mrow>
+ </m:math>
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mi>P</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+        </m:mrow>
+        <m:mo>,</m:mo>
+        <m:mrow>
+         <m:mn>0</m:mn>
+         <m:mo>+</m:mo>
+        </m:mrow>
+        <m:mo>,</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+        </m:mrow>
+        <m:mo>,</m:mo>
+        <m:mrow>
+         <m:mn>0</m:mn>
+         <m:mo>-</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:msubsup>
+     <m:msup>
+      <m:mi>t</m:mi>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>b</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>4</m:mn>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mi mathvariant="normal">&#x2148;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi>sin</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>a</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>sin</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">B</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where the contour starts from an arbitrary point 
+ <m:math display="inline">
+  <m:mi>P</m:mi>
+ </m:math> in the interval
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>(</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>)</m:mo>
+  </m:mrow>
+ </m:math>,circles
+ <m:math display="inline">
+  <m:mn>1</m:mn>
+ </m:math> and then
+ <m:math display="inline">
+  <m:mn>0</m:mn>
+ </m:math> in the positive sense, circles
+ <m:math display="inline">
+  <m:mn>1</m:mn>
+ </m:math> and then
+ <m:math display="inline">
+  <m:mn>0</m:mn>
+ </m:math> in the negative sense, and returns to
+ <m:math display="inline">
+  <m:mi>P</m:mi>
+ </m:math>. It can always be deformed into the contour shown here.
+</p>
+
+<div align="center">
+ <!-- Need a better Axiom graphic for this
+ <img width="302" height="104" alt="" src="bitmaps/12F3.png"/> -=
->
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mi>t</m:mi>
+ </m:math>-plane. Contour for Pochhammer's integral.
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfcontinuedfractions.xhtml}
+<<dlmfcontinuedfractions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Continued Fractions
+  </div>
+  <hr/>
+<h3>Continued Fractions</h3>
+
+<p>For
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mi>z</m:mi>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>+</m:mo>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>-</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mfrac>
+       <m:msub>
+        <m:mi>a</m:mi>
+        <m:mn>0</m:mn>
+       </m:msub>
+       <m:mrow>
+        <m:mrow>
+         <m:mo>+</m:mo>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>+</m:mo>
+       </m:mrow>
+      </m:mfrac>
+      <m:mrow>
+       <m:mfrac>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>+</m:mo>
+          <m:mi>z</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+        </m:mrow>
+       </m:mfrac>
+       <m:mrow>
+        <m:mfrac>
+         <m:msub>
+          <m:mi>a</m:mi>
+          <m:mn>2</m:mn>
+         </m:msub>
+         <m:mrow>
+          <m:mrow>
+           <m:mo>+</m:mo>
+           <m:mi>z</m:mi>
+          </m:mrow>
+          <m:mo>+</m:mo>
+         </m:mrow>
+        </m:mfrac>
+        <m:mrow>
+         <m:mfrac>
+          <m:msub>
+           <m:mi>a</m:mi>
+           <m:mn>3</m:mn>
+          </m:msub>
+          <m:mrow>
+           <m:mrow>
+            <m:mo>+</m:mo>
+            <m:mi>z</m:mi>
+           </m:mrow>
+           <m:mo>+</m:mo>
+          </m:mrow>
+         </m:mfrac>
+         <m:mrow>
+          <m:mfrac>
+           <m:msub>
+            <m:mi>a</m:mi>
+            <m:mn>4</m:mn>
+           </m:msub>
+           <m:mrow>
+            <m:mrow>
+             <m:mo>+</m:mo>
+             <m:mi>z</m:mi>
+            </m:mrow>
+            <m:mo>+</m:mo>
+           </m:mrow>
+          </m:mfrac>
+          <m:mfrac>
+           <m:msub>
+            <m:mi>a</m:mi>
+            <m:mn>5</m:mn>
+           </m:msub>
+           <m:mrow>
+            <m:mi>z</m:mi>
+            <m:mo>+</m:mo>
+           </m:mrow>
+          </m:mfrac>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>0</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mn>12</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>1</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mn>30</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>2</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>53</m:mn>
+     <m:mn>210</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>3</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>195</m:mn>
+     <m:mn>371</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>4</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>22999</m:mn>
+     <m:mn>22737</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>5</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>299 44523</m:mn>
+     <m:mn>197 33142</m:mn>
+    </m:mfrac>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mn>6</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mn>10 95352 41009</m:mn>
+     <m:mn>4 82642 75462</m:mn>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For rational values of
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>a</m:mi>
+   <m:mn>7</m:mn>
+  </m:msub>
+ </m:math> to
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>a</m:mi>
+   <m:mn>11</m:mn>
+  </m:msub>
+ </m:math> and 40S values of
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>a</m:mi>
+   <m:mn>0</m:mn>
+  </m:msub>
+ </m:math> to
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>a</m:mi>
+   <m:mn>40</m:mn>
+  </m:msub>
+ </m:math>, see
+<a href="http://dlmf.nist.gov/Contents/bib/C#char:1980:osc">
+   Char(1980)
+</a>. Also see
+<a href="http://dlmf.nist.gov/Contents/bib/J#jones:1980:con">
+   Jones and Thron(1980)
+</a>(pp.=C2;348=E2=80=93350) and
+<a href="http://dlmf.nist.gov/Contents/bib/L#lorentzen:1992:cfa">
+   Lorentzen and Waadeland(1992)
+</a>(pp.=C2;221=E2=80=93224) for further information.
+</p>
+<<page foot>>
+@
+
+\subsection{dlmfdefinitions.xhtml}
+<<dlmfdefinitions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Definitions
+  </div>
+  <hr/>
+<h3>Definitions</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Gamma and Psi Functions</li>
+ <li>Euler's Constant</li>
+ <li>Pochhammer's Symbol</li>
+</ul>
+<h4>Gamma and Psi Functions</h4>
+<h5>Euler's Integral</h5>
+<m:math display="block">
+ <m:mrow>
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x00393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>z</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:msubsup>
+     <m:mo>&#x222B;</m:mo>
+     <m:mn>0</m:mn>
+     <m:mi mathvariant="normal">&#x221E;</m:mi>
+    </m:msubsup>
+    <m:msup>
+     <m:mi mathvariant="normal">&#x02147;</m:mi>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:msup>
+    <m:msup>
+     <m:mi>t</m:mi>
+     <m:mrow>
+      <m:mi>z</m:mi>
+      <m:mo>-</m:mo>
+      <m:mn>1</m:mn>
+     </m:mrow>
+    </m:msup>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x2146;</m:mi>
+     <m:mi>t</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:mrow>
+</m:math>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+    <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+
+When
+<m:math display="inline">
+ <m:mrow>
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x211C;</m:mi>
+   <m:mi>z</m:mi>
+  </m:mrow>
+  <m:mo>&#x2264;</m:mo>
+  <m:mn>0</m:mn>
+ </m:mrow>
+</m:math>,
+
+<m:math display="inline">
+ <m:mrow>
+  <m:mi mathvariant="normal">&#x0393;</m:mi>
+  <m:mrow>
+   <m:mo>(</m:mo>
+   <m:mi>z</m:mi>
+   <m:mo>)</m:mo>
+  </m:mrow>
+ </m:mrow>
+</m:math> is defined by analytic continuation. It is a meromorphic
+          function with no zeros, and with simple poles of residue
+
+<m:math display="inline">
+ <m:mfrac bevelled="true">
+  <m:msup>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+   <m:mi>n</m:mi>
+  </m:msup>
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mi mathvariant="normal">!</m:mi>
+  </m:mrow>
+ </m:mfrac>
+</m:math> at
+
+<m:math display="inline">
+ <m:mrow>
+  <m:mi>z</m:mi>
+  <m:mo>=</m:mo>
+  <m:mrow>
+   <m:mo>-</m:mo>
+   <m:mi>n</m:mi>
+  </m:mrow>
+ </m:mrow>
+</m:math>. 
+
+<m:math display="inline">
+ <m:mfrac bevelled="true">
+  <m:mn>1</m:mn>
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:mfrac>
+</m:math> is entire, with simple zeros at
+
+<m:math display="inline">
+ <m:mrow>
+  <m:mi>z</m:mi>
+  <m:mo>=</m:mo>
+  <m:mrow>
+   <m:mo>-</m:mo>
+   <m:mi>n</m:mi>
+  </m:mrow>
+ </m:mrow>
+</m:math>.
+
+<p>
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac bevelled="true">
+     <m:mrow>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mo>&#x2032;</m:mo>
+      </m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+</p>
+  
+<p>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> is meromorphic with simple poles of residue
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>-</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math> at
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mi>n</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</p>
+
+<h4>Euler's Constant</h4>
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>&#x03B3;</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munder>
+      <m:mo movablelimits="false">lim</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>&#x2192;</m:mo>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:mrow>
+     </m:munder>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>3</m:mn>
+        </m:mfrac>
+        <m:mo>+</m:mo>
+        <m:mi mathvariant="normal">&#x2026;</m:mi>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mi>n</m:mi>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mi>n</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>0.57721 56649 01532 86060</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+
+<h4>Pochhammer's Symbol</h4>
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>a</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mn>0</m:mn>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>a</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mi>n</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi>a</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>2</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>n</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>a</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mi>n</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mfrac bevelled="true">
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>n</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>a</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:math>
+
+<div align="right">
+  <m:math display="inline">
+   <m:mrow>
+    <m:mi>a</m:mi>
+    <m:mo>&#x2260;</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>n</m:mi>
+     </m:mrow>
+     <m:mo>,</m:mo>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>n</m:mi>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mn>1</m:mn>
+     </m:mrow>
+     <m:mo>,</m:mo>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>n</m:mi>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mn>2</m:mn>
+     </m:mrow>
+     <m:mo>,</m:mo>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:math>
+ </div>
+<<page foot>>
+@
+
+\subsection{dlmffunctionrelations.xhtml}
+<<dlmffunctionrelations.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Function Relations
+  </div>
+  <hr/>
+<h3>Functional Relations</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Recurrence</li>
+ <li>Reflection</li>
+ <li>Multiplication</li>
+ <li>Bohr-Mollerup Theorem</li>
+</ul>
+<h4>Recurrence</h4>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+       </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi>z</m:mi>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mi>z</m:mi>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+
+<h4>Reflection</h4>
+<a name="equation3"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac bevelled="true">
+     <m:mi>&#x03C0;</m:mi>
+     <m:mrow>
+      <m:mi>sin</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>&#x0177;</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mfrac bevelled="true">
+      <m:mi>&#x03C0;</m:mi>
+      <m:mrow>
+       <m:mi>tan</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>&#x0177;</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<h4>Multiplication</h4>
+<div align="left">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mn>2</m:mn>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mi>&#x03C0;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mfrac bevelled="true">
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="left">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mn>3</m:mn>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>3</m:mn>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mn>3</m:mn>
+      <m:mrow>
+       <m:mrow>
+        <m:mn>3</m:mn>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>3</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>2</m:mn>
+          <m:mn>3</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="left">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>n</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac bevelled="true">
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:mi>n</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msup>
+     <m:msup>
+      <m:mi>n</m:mi>
+      <m:mrow>
+       <m:mrow>
+        <m:mi>n</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>n</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:munderover>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mi>k</m:mi>
+         <m:mi>n</m:mi>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:munderover>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mfrac>
+       <m:mi>k</m:mi>
+       <m:mi>n</m:mi>
+      </m:mfrac>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac bevelled="true">
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msup>
+     <m:msup>
+      <m:mi>n</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mfrac bevelled="true">
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>&#x03C8;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mi>z</m:mi>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C8;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mo>+</m:mo>
+           <m:mstyle displaystyle="false">
+            <m:mfrac>
+             <m:mn>1</m:mn>
+             <m:mn>2</m:mn>
+            </m:mfrac>
+           </m:mstyle>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mi>ln</m:mi>
+      <m:mn>2</m:mn>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mi>n</m:mi>
+      </m:mfrac>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x2211;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>0</m:mn>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:munderover>
+       <m:mi>&#x03C8;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mfrac>
+          <m:mi>k</m:mi>
+          <m:mi>n</m:mi>
+         </m:mfrac>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mi>ln</m:mi>
+      <m:mi>n</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<a name="bohrmolleruptheorem"/>
+<h4>Bohr-Mollerup Theorem</h4>
+
+<br/>
+If a positive function
+<m:math display="inline">
+ <m:mrow>
+  <m:mi>f</m:mi>
+  <m:mrow>
+   <m:mo>(</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>)</m:mo>
+  </m:mrow>
+ </m:mrow>
+</m:math> on
+<m:math display="inline">
+ <m:mrow>
+  <m:mo>(</m:mo>
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>,</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+  <m:mo>)</m:mo>
+ </m:mrow>
+</m:math> satisfies
+<m:math display="inline">
+ <m:mrow>
+  <m:mrow>
+   <m:mi>f</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>x</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+  <m:mo>=</m:mo>
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mrow>
+    <m:mi>f</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>x</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:mrow>
+</m:math>,
+
+<m:math display="inline">
+ <m:mrow>
+  <m:mrow>
+   <m:mi>f</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mn>1</m:mn>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+  <m:mo>=</m:mo>
+  <m:mn>1</m:mn>
+ </m:mrow>
+</m:math>, and
+
+<m:math display="inline">
+ <m:mrow>
+  <m:mi>ln</m:mi>
+  <m:mrow>
+   <m:mi>f</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:mrow>
+</m:math> is convex, then
+
+<m:math display="inline">
+ <m:mrow>
+  <m:mrow>
+   <m:mi>f</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+  <m:mo>=</m:mo>
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:mrow>
+</m:math>.
+<<page foot>>
+@
+
+\subsection{dlmfgraphics.xhtml}
+<<dlmfgraphics.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Graphics
+  </div>
+  <hr/>
+<h3>Graphics</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Real Argument</li>
+ <li>The Psi Function</li>
+ <li>Complex Argument</li>
+</ul>
+<h4>Real Argument</h4>
+ <img width="403" height="482" src="bitmaps/gammareal3.png"/>
+ <br/>
+This graph shows the
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mfrac bevelled="true">
+   <m:mn>1</m:mn>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>x</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mfrac>
+ </m:math>.
+
+To create these two graphs in Axiom:
+<pre>
+ -- Draw the first graph in a viewport
+ viewport1:=draw(Gamma(i), i=-4.2..4, adaptive==true, unit===
[1.0,1.0])
+ -- Draw the second graph in a viewport
+ viewport2:=draw(1/Gamma(i), i=-4.2..4, adaptive==true, unit===
[1.0,1.0])
+ -- Get the Gamma graph from the first viewport and layer it on top
+ putGraph(viewport2,getGraph(viewport1,1),2)
+ -- Remove the points and leave the lines
+ points(viewport2,1,"off")
+ points(viewport2,2,"off")
+ -- Show the combined graph
+ makeViewport2D(viewport2)
+</pre>
+
+ <img width="300" height="176" alt="" src="bitmaps/loggamma.png"=
/>
+ <br/>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>x</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>. This function is convex on
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>(</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x221E;</m:mi>
+   </m:mrow>
+   <m:mo>)</m:mo>
+  </m:mrow>
+ </m:math>;
+ <br/>
+  compare <a href="dlmffunctionalrelations.xhtml#bohrmolleruptheorem">
+           Functional Relations</a>
+ <p>
+You can construct this graph with the Axiom commands:
+<pre>
+  -- draw the graph of log(Gamma) in a viewport
+  viewport1:=draw(log Gamma(i), i=0..8, adaptive==true, unit===
[1.0,1.0])
+  -- turn off the points and leave the lines
+  points(viewport1,1,"off")
+</pre>
+</p>
+ <br/>
+
+ <h4>The Psi Function
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</h4>
+
+<p> This function is a special case of the polygamma function.
+In particular,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>x</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> is equal to polygamma(0,x).
+ </p>
+ <br/>
+ <br/>
+
+ <img width="522" height="556" alt="" src="bitmaps/psi.png"/>
+ <br/>
+You can reconstruct this graph in Axiom by:
+<pre>
+  -- first construct the psi function
+  psi(x)==polygamma(0,x)
+  -- draw the graph in a viewport
+  viewport:=draw(psi(y),y=-3.5..4,adaptive==true)
+  -- make the gradient obvious
+  scale(viewport,1,0.9,22.5)
+  -- and recenter the graph
+  translate(viewport,1,0,-0.02)
+  -- turn off the points and keep the line
+  points(viewport,1,"off")
+</pre>
+
+ <h4>Complex Argument</h4>
+
+ <img width="400" height="400" alt="" src="bitmaps/gammacomplex.=
png"/>
+ <br/>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>x</m:mi>
+      <m:mo>+</m:mo>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+       <m:mi>y</m:mi>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+ <br/>
+
+You can reconstruct this image in Axiom with:
+<pre>
+  -- Set up the default viewpoint
+  viewPhiDefault(-%pi/4)
+  -- define the point set function
+  gam(x,y)==
+    g:=Gamma complex(x,y)
+    point [x,y,max(min(real g,4),-4), argument g]
+  -- draw the image and remember the viewport
+  viewport:=draw(gam, -4..4,-3..3,var1Steps==100,var2Steps==10=
0)
+  -- set the color mapping for the image
+  colorDef(viewport,blue(),blue())
+  -- and smoothly shade it
+  drawStyle(viewport,"smooth")
+</pre>
+ <img width="400" height="400" src="bitmaps/gammacomplexinverse.pn=
g"/>
+<br/>
+ <m:math display="inline">
+  <m:mfrac bevelled="true">
+   <m:mn>1</m:mn>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>x</m:mi>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2148;</m:mi>
+        <m:mi>y</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mfrac>
+ </m:math>
+ <br/>
+
+<p>
+You can reproduce this image from Axiom with:
+<pre>
+  -- Set up the default viewpoint
+  viewPhiDefault(-%pi/4)
+  -- Define the complex Gamma inverse function
+  gaminv(x,y)==
+    g:=1/(Gamma complex(x,y))
+    point [x,y,max(min(real g,4),-4), argument g]
+  -- draw the 3D image and remember the viewport
+  viewport:=draw(gaminv, -4..4,-3..3,var1Steps==100,var2Steps===
100)
+  -- make the image a uniform color
+  colorDef(viewport,blue(),blue())
+  -- and make it pretty
+  drawStyle(viewport,"smooth")
+</pre>
+</p>
+
+
+<p>
+To get these exact images with the colored background you need
+to use GIMP to set the background. The steps I used are:
+<ol>
+<li>Save the image as a pixmap</li>
+<li>Open the saved file in gimp</li>
+<li>Dialogs->Colors->ColorPicker button</li>
+<li>Eyedrop the color of the web page</li>
+<li>Set the color as the foreground on the FG/BG page</li>
+<li>Dialogs->Layers</li>
+<li>Duplicate Layer</li>
+<li>Layer->Stack->Select bottom layer</li>
+<li>Edit->Fill with Foreground color</li>
+<li>(on Layers panel)Select image</li>
+<li>(on Layers panel) Mode->Darken Only</li>
+</ol>
+Note that you may have to use "lighten only" first before it will
+allow you to choose "darken only".
+</p>
+
+<<page foot>>
+@
+
+\subsection{dlmfinequalities.xhtml}
+<<dlmfinequalities.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Inequalities
+  </div>
+  <hr/>
+<h3>Inequalities</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Real Variables</li>
+ <li>Complex Variables</li>
+</ul>
+
+<h4>Real Variables</h4>
+<p>Throughout this subsection
+<m:math display="inline">
+ <m:mrow>
+  <m:mi>x</m:mi>
+  <m:mo>&gt;</m:mo>
+  <m:mn>0</m:mn>
+ </m:mrow>
+</m:math>.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mn>1</m:mn>
+    <m:mo>&lt;</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mfrac bevelled="true">
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi>x</m:mi>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>x</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mi>x</m:mi>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>x</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&lt;</m:mo>
+    <m:msup>
+     <m:mi mathvariant="normal">&#x2147;</m:mi>
+     <m:mfrac bevelled="true">
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>12</m:mn>
+        <m:mi>x</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mfrac>
+    </m:msup>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>x</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>+</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mi>x</m:mi>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mn>2</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mi>x</m:mi>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mn>2</m:mn>
+      </m:msup>
+     </m:mfrac>
+     <m:mo>+</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mfrac bevelled="true">
+           <m:mn>1</m:mn>
+           <m:mi>x</m:mi>
+          </m:mfrac>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mn>2</m:mn>
+      </m:msup>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mn>2</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msup>
+     <m:mi>x</m:mi>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mo>-</m:mo>
+      <m:mi>s</m:mi>
+     </m:mrow>
+    </m:msup>
+    <m:mo>&lt;</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>s</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>&lt;</m:mo>
+    <m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>x</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mo>-</m:mo>
+      <m:mi>s</m:mi>
+     </m:mrow>
+    </m:msup>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>s</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>exp</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:mi>s</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>&#x03C8;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>x</m:mi>
+          <m:mo>+</m:mo>
+          <m:msup>
+           <m:mi>s</m:mi>
+           <m:mfrac bevelled="true">
+            <m:mn>1</m:mn>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+          </m:msup>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>s</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>&#x2264;</m:mo>
+    <m:mrow>
+     <m:mi>exp</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:mi>s</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>&#x03C8;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>x</m:mi>
+          <m:mo>+</m:mo>
+          <m:mrow>
+           <m:mstyle displaystyle="false">
+            <m:mfrac>
+             <m:mn>1</m:mn>
+             <m:mn>2</m:mn>
+            </m:mfrac>
+           </m:mstyle>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mi>s</m:mi>
+             <m:mo>+</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>s</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h4>Complex Variables</h4>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>|</m:mo>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>|</m:mo>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mrow>
+     <m:mo>|</m:mo>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>x</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>|</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>|</m:mo>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>x</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>|</m:mo>
+    </m:mrow>
+    <m:mo>&#x2265;</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>sech</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>&#x03C0;</m:mi>
+          <m:mi>y</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac bevelled="true">
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>x</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mfrac>
+    <m:mn>1</m:mn>
+    <m:mn>2</m:mn>
+   </m:mfrac>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>b</m:mi>
+    <m:mo>-</m:mo>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>a</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>, and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mi>x</m:mi>
+    <m:mo>+</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x2148;</m:mi>
+     <m:mi>y</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math> with
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>&#x2223;</m:mo>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>a</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>&#x2223;</m:mo>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:msup>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>|</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>b</m:mi>
+       <m:mo>-</m:mo>
+       <m:mi>a</m:mi>
+      </m:mrow>
+     </m:msup>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>|</m:mo>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>|</m:mo>
+    </m:mrow>
+    <m:mo>&#x2264;</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac bevelled="true">
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+     </m:msup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>|</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>x</m:mi>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mfrac bevelled="true">
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mrow>
+          <m:mo>|</m:mo>
+          <m:mi>y</m:mi>
+          <m:mo>|</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi>exp</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>6</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:msup>
+         <m:mrow>
+          <m:mo>|</m:mo>
+          <m:mi>z</m:mi>
+          <m:mo>|</m:mo>
+         </m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfinfiniteproducts.xhtml}
+<<dlmfinfiniteproducts.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Infinite Products
+  </div>
+  <hr/>
+<h3>Infinite Products</h3>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munder>
+      <m:mo movablelimits="false">lim</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>&#x2192;</m:mo>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:mrow>
+     </m:munder>
+     <m:mfrac>
+      <m:mrow>
+       <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mi mathvariant="normal">!</m:mi>
+      </m:mrow>
+      <m:msup>
+       <m:mi>k</m:mi>
+       <m:mi>z</m:mi>
+      </m:msup>
+     </m:mrow>
+     <m:mrow>
+      <m:mi>z</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>k</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi>z</m:mi>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mi>&#x03B3;</m:mi>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mi>z</m:mi>
+         <m:mi>k</m:mi>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mi>z</m:mi>
+         <m:mi>k</m:mi>
+        </m:mfrac>
+       </m:mrow>
+      </m:msup>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msup>
+     <m:mrow>
+      <m:mo>|</m:mo>
+      <m:mfrac>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mi>x</m:mi>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>x</m:mi>
+          <m:mo>+</m:mo>
+          <m:mrow>
+           <m:mi mathvariant="normal">&#x2148;</m:mi>
+           <m:mi>y</m:mi>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mfrac>
+      <m:mo>|</m:mo>
+     </m:mrow>
+     <m:mn>2</m:mn>
+    </m:msup>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>0</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mo>+</m:mo>
+      <m:mfrac>
+       <m:msup>
+        <m:mi>y</m:mi>
+        <m:mn>2</m:mn>
+       </m:msup>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>x</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:msup>
+      </m:mfrac>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi>m</m:mi>
+     </m:munderover>
+     <m:msub>
+      <m:mi>a</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi>m</m:mi>
+     </m:munderover>
+     <m:msub>
+      <m:mi>b</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>then
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>0</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:mfrac>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:msub>
+          <m:mi>a</m:mi>
+          <m:mn>1</m:mn>
+         </m:msub>
+         <m:mo>+</m:mo>
+         <m:mi>k</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:msub>
+          <m:mi>a</m:mi>
+          <m:mn>2</m:mn>
+         </m:msub>
+         <m:mo>+</m:mo>
+         <m:mi>k</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x22EF;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:msub>
+          <m:mi>a</m:mi>
+          <m:mi>m</m:mi>
+         </m:msub>
+         <m:mo>+</m:mo>
+         <m:mi>k</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:msub>
+          <m:mi>b</m:mi>
+          <m:mn>1</m:mn>
+         </m:msub>
+         <m:mo>+</m:mo>
+         <m:mi>k</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:msub>
+          <m:mi>b</m:mi>
+          <m:mn>2</m:mn>
+         </m:msub>
+         <m:mo>+</m:mo>
+         <m:mi>k</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x22EF;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:msub>
+          <m:mi>b</m:mi>
+          <m:mi>m</m:mi>
+         </m:msub>
+         <m:mo>+</m:mo>
+         <m:mi>k</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>b</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>b</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>b</m:mi>
+         <m:mi>m</m:mi>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mi>m</m:mi>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>provided that none of the
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>b</m:mi>
+   <m:mi>k</m:mi>
+  </m:msub>
+ </m:math>
+ is zero or a negative integer.
+</p>
+<<page foot>>
+@
+
+\subsection{dlmfintegrals.xhtml}
+<<dlmfintegrals.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Integrals
+  </div>
+  <hr/>
+<h3>Integrals</h3>
+
+<a name="equation1"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mi>c</m:mi>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x221E;</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>c</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x221E;</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+        </m:mrow>
+       </m:mrow>
+      </m:msubsup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>s</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>a</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>b</m:mi>
+         <m:mo>-</m:mo>
+         <m:mi>s</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:msup>
+       <m:mi>z</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>s</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>s</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>b</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:msup>
+       <m:mi>z</m:mi>
+       <m:mi>a</m:mi>
+      </m:msup>
+     </m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>+</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+     </m:msup>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>a</m:mi>
+      <m:mo>+</m:mo>
+      <m:mi>b</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x211C;</m:mi>
+     <m:mi>a</m:mi>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mi>c</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>b</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mi>&#x03C0;</m:mi>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:msup>
+       <m:mrow>
+        <m:mo>|</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>a</m:mi>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>|</m:mo>
+       </m:mrow>
+       <m:mn>2</m:mn>
+      </m:msup>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>b</m:mi>
+          </m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>&#x03C0;</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>t</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>a</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mrow>
+         <m:mi>sin</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mi>b</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>a</m:mi>
+      </m:mrow>
+     </m:msup>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>a</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>b</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mi>&#x03C0;</m:mi>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<h5>Barnes's Beta Integral</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>b</m:mi>
+         <m:mo>+</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>c</m:mi>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>d</m:mi>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>c</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>d</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>b</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>c</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>b</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>d</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>c</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>d</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x211C;</m:mi>
+     <m:mi>a</m:mi>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x211C;</m:mi>
+     <m:mi>b</m:mi>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x211C;</m:mi>
+     <m:mi>c</m:mi>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x211C;</m:mi>
+     <m:mi>d</m:mi>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h5>Ramanujan's Beta Integral</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>b</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>c</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>d</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>b</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>c</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>d</m:mi>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>3</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>d</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>b</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>b</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>d</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>a</m:mi>
+      <m:mo>+</m:mo>
+      <m:mi>b</m:mi>
+      <m:mo>+</m:mo>
+      <m:mi>c</m:mi>
+      <m:mo>+</m:mo>
+      <m:mi>d</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>3</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<h5>de Branges-Wilson Beta Integral</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>4</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>=E2=81=A2</m:mo>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:mfrac>
+       <m:mrow>
+        <m:msubsup>
+         <m:mo>&#x220F;</m:mo>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>=</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mn>4</m:mn>
+        </m:msubsup>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:msub>
+            <m:mi>a</m:mi>
+            <m:mi>k</m:mi>
+           </m:msub>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:msub>
+            <m:mi>a</m:mi>
+            <m:mi>k</m:mi>
+           </m:msub>
+           <m:mo>-</m:mo>
+           <m:mrow>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi mathvariant="normal">&#x2148;</m:mi>
+           <m:mi>t</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      </m:mfrac>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:msub>
+       <m:mo>&#x220F;</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi>j</m:mi>
+        <m:mo>&lt;</m:mo>
+        <m:mi>k</m:mi>
+        <m:mo>&#x2264;</m:mo>
+        <m:mn>4</m:mn>
+       </m:mrow>
+      </m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mi>j</m:mi>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>3</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>a</m:mi>
+         <m:mn>4</m:mn>
+        </m:msub>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:msub>
+      <m:mi>a</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>1</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+    <m:mo>,</m:mo>
+    <m:mn>4</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfintegralrepresentations.xhtml}
+<<dlmfintegralrepresentations.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Integral Representations
+  </div>
+  <hr/>
+<h3>Integral Representations</h3>
+
+<h6>Contents</h6>
+<ul>
+ <li>Gamma Function</li>
+ <li>Psi Function and Euler's Constant</li>
+</ul>
+
+<h4>Gamma Function</h4>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mi>&#x03BC;</m:mi>
+     </m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mi>&#x03BD;</m:mi>
+        <m:mi>&#x03BC;</m:mi>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mi>z</m:mi>
+       <m:mfrac bevelled="true">
+        <m:mi>&#x03BD;</m:mi>
+        <m:mi>&#x03BC;</m:mi>
+       </m:mfrac>
+      </m:msup>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mi>exp</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:msup>
+          <m:mi>t</m:mi>
+          <m:mi>&#x03BC;</m:mi>
+         </m:msup>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:msup>
+      <m:mi>t</m:mi>
+      <m:mrow>
+       <m:mi>&#x03BD;</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>&#x03BD;</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03BC;</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>, and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>. (The fractional powers have their principal values.)
+</p>
+
+<h5>Hankel's Loop Integral</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>0</m:mn>
+         <m:mo>+</m:mo>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:msubsup>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mi>t</m:mi>
+      </m:msup>
+      <m:msup>
+       <m:mi>t</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where the contour begins at
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>-</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math>, circles the origin once in the positive direction, and retur=
ns to
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>-</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math>.
+ <m:math display="inline">
+  <m:msup>
+   <m:mi>t</m:mi>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mi>z</m:mi>
+   </m:mrow>
+  </m:msup>
+ </m:math> has its principal value where
+ <m:math display="inline">
+  <m:mi>t</m:mi>
+ </m:math> crosses the positive real axis, and is continuous.
+</p>
+
+<div align="center">
+ <!-- need a better Axiom graphic than this
+  <img width="302" height="150" alt="" src="bitmaps/9F1.png"/> -=
->
+</div>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mi>t</m:mi>
+ </m:math>-plane. Contour for Hankel's loop integral.
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi>c</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:msup>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mi>t</m:mi>
+       <m:mo>|</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mi>c</m:mi>
+        <m:msup>
+         <m:mi>t</m:mi>
+         <m:mn>2</m:mn>
+        </m:msup>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>c</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where the path is the real axis.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>1</m:mn>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:msup>
+       <m:mi>t</m:mi>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>t</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>k</m:mi>
+       </m:msup>
+       <m:mrow>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>z</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mi mathvariant="normal">!</m:mi>
+        </m:mrow>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:msup>
+      <m:mi>t</m:mi>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:munderover>
+         <m:mo movablelimits="false">&#x2211;</m:mo>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>=</m:mo>
+          <m:mn>0</m:mn>
+         </m:mrow>
+         <m:mi>n</m:mi>
+        </m:munderover>
+        <m:mfrac>
+         <m:mrow>
+          <m:msup>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mo>-</m:mo>
+             <m:mn>1</m:mn>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+           <m:mi>k</m:mi>
+          </m:msup>
+          <m:msup>
+           <m:mi>t</m:mi>
+           <m:mi>k</m:mi>
+          </m:msup>
+         </m:mrow>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mi mathvariant="normal">!</m:mi>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mspace width="0.2em"/>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mi>n</m:mi>
+    </m:mrow>
+    <m:mo>-</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mi>n</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>cos</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:msup>
+      <m:mi>t</m:mi>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi>cos</m:mi>
+      <m:mspace width="0.2em"/>
+      <m:mi>t</m:mi>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>sin</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:msup>
+      <m:mi>t</m:mi>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi>sin</m:mi>
+      <m:mspace width="0.2em"/>
+      <m:mi>t</m:mi>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mi>n</m:mi>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>cos</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>n</m:mi>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mi>cos</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:msup>
+        <m:mi>t</m:mi>
+        <m:mi>n</m:mi>
+       </m:msup>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>3</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>4</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mi>n</m:mi>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi>sin</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>n</m:mi>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mi>sin</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:msup>
+        <m:mi>t</m:mi>
+        <m:mi>n</m:mi>
+       </m:msup>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>3</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>4</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<h5>Binet's Formula</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>ln</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>-</m:mo>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:msubsup>
+        <m:mo>&#x222B;</m:mo>
+        <m:mn>0</m:mn>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:msubsup>
+       <m:mfrac>
+        <m:mrow>
+         <m:mi>arctan</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mfrac bevelled="true">
+           <m:mi>t</m:mi>
+           <m:mi>z</m:mi>
+          </m:mfrac>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:msup>
+          <m:mi mathvariant="normal">&#x2147;</m:mi>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>&#x03C0;</m:mi>
+           <m:mi>t</m:mi>
+          </m:mrow>
+         </m:msup>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:mfrac>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>t</m:mi>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mo>&#x2061;</m:mo>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mfrac bevelled="true">
+    <m:mi>&#x03C0;</m:mi>
+    <m:mn>2</m:mn>
+   </m:mfrac>
+  </m:mrow>
+ </m:math> and the inverse tangent has its principal value.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>ln</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mi>&#x03B3;</m:mi>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi mathvariant="normal">&#x2148;</m:mi>
+       </m:mrow>
+      </m:mfrac>
+      <m:mrow>
+       <m:msubsup>
+        <m:mo>&#x222B;</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x221E;</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x221E;</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+         </m:mrow>
+        </m:mrow>
+       </m:msubsup>
+       <m:mfrac>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:msup>
+          <m:mi>z</m:mi>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>s</m:mi>
+          </m:mrow>
+         </m:msup>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>s</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mrow>
+          <m:mi>sin</m:mi>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mrow>
+            <m:mi>&#x03C0;</m:mi>
+            <m:mi>s</m:mi>
+           </m:mrow>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+        </m:mrow>
+       </m:mfrac>
+       <m:mrow>
+        <m:mi>&#x03B6;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>s</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>s</m:mi>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mo>&#x2061;</m:mo>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mi>&#x03C0;</m:mi>
+    <m:mo>-</m:mo>
+    <m:mi>&#x03B4;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math> (
+ <m:math display="inline">
+  <m:mrow>
+   <m:none/>
+   <m:mo>&lt;</m:mo>
+   <m:mi>&#x03C0;</m:mi>
+  </m:mrow>
+ </m:math>),
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>1</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>c</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>2</m:mn>
+  </m:mrow>
+ </m:math>, and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03B6;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>s</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</p>
+
+<p>For additional representations see
+<a href="http://dlmf.nist.gov/Contents/bib/W#whittaker:1927:cma">
+   Whittaker and Watson(1927)</a>
+</p>
+
+<h4>Psi Function and Euler's Constant</h4>
+<p>For
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>z</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:msup>
+        <m:mi>t</m:mi>
+       </m:mfrac>
+       <m:mo>-</m:mo>
+       <m:mfrac>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mi>t</m:mi>
+          </m:mrow>
+         </m:mrow>
+        </m:msup>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:msup>
+          <m:mi mathvariant="normal">&#x2147;</m:mi>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>t</m:mi>
+          </m:mrow>
+         </m:msup>
+        </m:mrow>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>ln</m:mi>
+      <m:mspace width="0.2em"/>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>0</m:mn>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mi>t</m:mi>
+        </m:mfrac>
+        <m:mo>-</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>-</m:mo>
+          <m:msup>
+           <m:mi mathvariant="normal">&#x2147;</m:mi>
+           <m:mrow>
+            <m:mo>-</m:mo>
+            <m:mi>t</m:mi>
+           </m:mrow>
+          </m:msup>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mspace width="0.2em"/>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi>t</m:mi>
+         <m:mi>z</m:mi>
+        </m:mrow>
+       </m:mrow>
+      </m:msup>
+      <m:mspace width="0.2em"/>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:mo>-</m:mo>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:msup>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mn>1</m:mn>
+           <m:mo>+</m:mo>
+           <m:mi>t</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mi>z</m:mi>
+        </m:msup>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+      <m:mi>t</m:mi>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>ln</m:mi>
+      <m:mspace width="0.2em"/>
+      <m:mi>z</m:mi>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>z</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:msubsup>
+        <m:mo>&#x222B;</m:mo>
+        <m:mn>0</m:mn>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:msubsup>
+       <m:mfrac>
+        <m:mrow>
+         <m:mi>t</m:mi>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2146;</m:mi>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:msup>
+            <m:mi>t</m:mi>
+            <m:mn>2</m:mn>
+           </m:msup>
+           <m:mo>+</m:mo>
+           <m:msup>
+            <m:mi>z</m:mi>
+            <m:mn>2</m:mn>
+           </m:msup>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:msup>
+            <m:mi mathvariant="normal">&#x2147;</m:mi>
+            <m:mrow>
+             <m:mn>2</m:mn>
+             <m:mi>&#x03C0;</m:mi>
+             <m:mi>t</m:mi>
+            </m:mrow>
+           </m:msup>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mfrac>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mi>&#x03B3;</m:mi>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:mo>-</m:mo>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mi>z</m:mi>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>-</m:mo>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+     </m:mfrac>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mn>1</m:mn>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>-</m:mo>
+       <m:msup>
+        <m:mi>t</m:mi>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>-</m:mo>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>&#x03B3;</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi mathvariant="normal">&#x2148;</m:mi>
+       </m:mrow>
+      </m:mfrac>
+      <m:mrow>
+       <m:msubsup>
+        <m:mo>&#x222B;</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x221E;</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x221E;</m:mi>
+          <m:mspace width="0.2em"/>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+         </m:mrow>
+        </m:mrow>
+       </m:msubsup>
+       <m:mfrac>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:msup>
+          <m:mi>z</m:mi>
+          <m:mrow>
+           <m:mrow>
+            <m:mo>-</m:mo>
+            <m:mi>s</m:mi>
+           </m:mrow>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+         </m:msup>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>sin</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>&#x03C0;</m:mi>
+           <m:mi>s</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mfrac>
+       <m:mrow>
+        <m:mi>&#x03B6;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>s</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mspace width="0.2em"/>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>s</m:mi>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B4;</m:mi>
+    </m:mrow>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:none/>
+      <m:mo>&lt;</m:mo>
+      <m:mi>&#x03C0;</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math> and
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>1</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>c</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>2</m:mn>
+  </m:mrow>
+ </m:math>.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>&#x03B3;</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>0</m:mn>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>t</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mspace width="0.2em"/>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mi>t</m:mi>
+      </m:mrow>
+      <m:mspace width="0.2em"/>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>-</m:mo>
+       <m:msup>
+        <m:mi mathvariant="normal">&#x2147;</m:mi>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mi>t</m:mi>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mfrac>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>t</m:mi>
+      </m:mrow>
+      <m:mi>t</m:mi>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>0</m:mn>
+       <m:mn>1</m:mn>
+      </m:msubsup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mspace width="0.2em"/>
+      <m:mfrac>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mi>t</m:mi>
+      </m:mfrac>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x222B;</m:mo>
+       <m:mn>1</m:mn>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msubsup>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>t</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mfrac>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:mi>t</m:mi>
+       </m:mrow>
+       <m:mi>t</m:mi>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msubsup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:msup>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:msup>
+          <m:mi mathvariant="normal">&#x2147;</m:mi>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>t</m:mi>
+          </m:mrow>
+         </m:msup>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>-</m:mo>
+       <m:mfrac>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mi>t</m:mi>
+         </m:mrow>
+        </m:msup>
+        <m:mi>t</m:mi>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mspace width="0.2em"/>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfmathematicalapplications.xhtml}
+<<dlmfmathematicalapplications.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Mathematical Applications
+  </div>
+  <hr/>
+<h3>Mathematical Applications</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Summation of Rational Functions</li>
+ <li>Mellin-Barnes Integrals</li>
+ <li>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">n</m:mi>
+ </m:math>-Dimensional Sphere</li>
+</ul>
+
+<h4>Summation of Rational Functions</h4>
+
+<p>As shown in
+ <a href="http://dlmf.nist.gov/Contents/bib/T#temme:1996:sfi">
+  Temme(1996)
+ </a>(=C2=A73.4), the results given in
+ <a href="dlmfseriesexpansions.xhtml">
+  Series Expansions
+ </a> can be used to sum infinite series of rational functions.
+</p>
+
+<h5>Example</h5>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>S</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mstyle displaystyle="false">
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+     </m:mstyle>
+     <m:msub>
+      <m:mi>a</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mi>k</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mstyle displaystyle="true">
+     <m:mfrac>
+      <m:mi>k</m:mi>
+      <m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mn>3</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>2</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mstyle>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>By decomposition into partial fractions</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>a</m:mi>
+     <m:mi>k</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>+</m:mo>
+       <m:mfrac>
+        <m:mn>2</m:mn>
+        <m:mn>3</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>+</m:mo>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>-</m:mo>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mrow>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:mfrac>
+        <m:mo>-</m:mo>
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>+</m:mo>
+          <m:mfrac>
+           <m:mn>2</m:mn>
+           <m:mn>3</m:mn>
+          </m:mfrac>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>Hence from (
+ <a href="dlmfseriesexpansions.xhtml#equation6">Series Expansions 6
+ </a>), ( Special Values and Extrema
+ <a href="dlmfspecialvaluesandextrema.xhtml#equation13">
+  Equation 13
+ </a> and
+ <a href="dlmfspecialvaluesandextrema.xhtml#equation19">
+  Equation 19
+ </a>)
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>S</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mstyle displaystyle="false">
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:mstyle>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mi>&#x03C8;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>2</m:mn>
+          <m:mn>3</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B3;</m:mi>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mn>3</m:mn>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mn>3</m:mn>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mn>2</m:mn>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>3</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mi>&#x03C0;</m:mi>
+      <m:msqrt>
+       <m:mn>3</m:mn>
+      </m:msqrt>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h4>Mellin-Barnes Integrals</h4>
+<p>Many special functions
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>f</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> can be represented as a <em>Mellin-Barnes integral</em>, that=
 is,
+  an integral of a product of gamma functions, reciprocals of gamma
+  functions, and a power of
+ <m:math display="inline">
+  <m:mi>z</m:mi>
+ </m:math>, the integration contour being doubly-infinite and eventually=

+  parallel to the imaginary axis. The left-hand side of (
+ <a href="dlmfintegrals.xhtml#equation1">
+  Integral Equation 1
+ </a>) is a typical example. By translating the contour parallel to itse=
lf
+ and summing the residues of the integrand, asymptotic expansions of
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>f</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> for large
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>|</m:mo>
+   <m:mi>z</m:mi>
+   <m:mo>|</m:mo>
+  </m:mrow>
+ </m:math>, or small
+ <m:math display="inline">
+  <m:mrow>
+   <m:mo>|</m:mo>
+   <m:mi>z</m:mi>
+   <m:mo>|</m:mo>
+  </m:mrow>
+ </m:math>, can be obtained complete with an integral representation of =
the
+  error term.
+</p>
+
+<h4>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">n</m:mi>
+ </m:math>-Dimensional Sphere</h4>
+
+<p>The volume
+ <m:math display="inline">
+  <m:mi>V</m:mi>
+ </m:math> and surface area
+ <m:math display="inline">
+  <m:mi>A</m:mi>
+ </m:math> of the
+ <m:math display="inline">
+  <m:mi>n</m:mi>
+ </m:math>-dimensional sphere of radius
+ <m:math display="inline">
+  <m:mi>r</m:mi>
+ </m:math> are given by
+</p>
+
+<div align="center">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>V</m:mi>
+    <m:mo>=</m:mo>
+    <m:mstyle displaystyle="true">
+     <m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mrow>
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+         <m:mi>n</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:msup>
+        <m:mi>r</m:mi>
+        <m:mi>n</m:mi>
+       </m:msup>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+          <m:mi>n</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mstyle>
+   </m:mrow>
+   <m:mo>,</m:mo>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>S</m:mi>
+    <m:mo>=</m:mo>
+    <m:mstyle displaystyle="true">
+     <m:mfrac>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:msup>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mrow>
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+         <m:mi>n</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:msup>
+        <m:mi>r</m:mi>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+         <m:mi>n</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mfrac>
+    </m:mstyle>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mstyle displaystyle="true">
+      <m:mfrac>
+       <m:mi>n</m:mi>
+       <m:mi>r</m:mi>
+      </m:mfrac>
+     </m:mstyle>
+     <m:mi>V</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfmethodsofcomputation.xhtml}
+<<dlmfmethodsofcomputation.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Methods of Computation
+  </div>
+  <hr/>
+<h3>Methods of Computation</h3>
+
+<p>An effective way of computing
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+in the right half-plane is backward recurrence, beginning with a value
+generated from the
+<a href="dlmfasymptoticexpansions.xhtml#equation3">
+ asymptotic expansion
+</a>
+Or we can use forward recurrence, with an
+<a href="dlmfseriesexpansions.xhtml#equation3">
+ initial value
+</a>.
+For the left half-plane we can continue the backward recurrence or
+make use of the
+<a href="dlmffunctionrelations.xhtml#equation3">
+ reflection formula
+</a>.
+</p>
+
+<p>Similarly for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x0393;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>z</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>, and the polygamma functions.
+</p>
+
+<p>For a comprehensive survey see
+ <a href="http://dlmf.nist.gov/Contents/bib/V#vanderlaan:1984:csf">
+  van der Laan and Temme(1984)
+ </a>(Chapter III).
+ See also
+ <a href="http://dlmf.nist.gov/Contents/bib/B#borwein:1992:feg">
+  Borwein and Zucker(1992)
+ </a>.
+</p>
+<<page foot>>
+@
+
+\subsection{dlmfmultidimensionalintegral.xhtml}
+<<dlmfmultidimensionalintegral.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Multidimensional Integral
+  </div>
+  <hr/>
+<h3>Multidimensional Integrals</h3>
+
+<p>Let
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>V</m:mi>
+   <m:mi>n</m:mi>
+  </m:msub>
+ </m:math> be the simplex:
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>t</m:mi>
+     <m:mn>1</m:mn>
+    </m:msub>
+    <m:mo>+</m:mo>
+    <m:msub>
+     <m:mi>t</m:mi>
+     <m:mn>2</m:mn>
+    </m:msub>
+    <m:mo>+</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+    <m:mo>+</m:mo>
+    <m:msub>
+     <m:mi>t</m:mi>
+     <m:mi>n</m:mi>
+    </m:msub>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:msub>
+    <m:mi>t</m:mi>
+    <m:mi>k</m:mi>
+   </m:msub>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>. Then for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:msub>
+     <m:mi>z</m:mi>
+     <m:mi>k</m:mi>
+    </m:msub>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>1</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mi>n</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mo>&#x222B;</m:mo>
+      <m:msub>
+       <m:mi>V</m:mi>
+       <m:mi>n</m:mi>
+      </m:msub>
+     </m:msub>
+     <m:msubsup>
+      <m:mi>t</m:mi>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:msub>
+        <m:mi>z</m:mi>
+        <m:mn>1</m:mn>
+       </m:msub>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msubsup>
+     <m:msubsup>
+      <m:mi>t</m:mi>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:msub>
+        <m:mi>z</m:mi>
+        <m:mn>2</m:mn>
+       </m:msub>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msubsup>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:msubsup>
+      <m:mi>t</m:mi>
+      <m:mi>n</m:mi>
+      <m:mrow>
+       <m:msub>
+        <m:mi>z</m:mi>
+        <m:mi>n</m:mi>
+       </m:msub>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msubsup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:msub>
+       <m:mi>t</m:mi>
+       <m:mn>1</m:mn>
+      </m:msub>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:msub>
+       <m:mi>t</m:mi>
+       <m:mn>2</m:mn>
+      </m:msub>
+     </m:mrow>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:msub>
+       <m:mi>t</m:mi>
+       <m:mi>n</m:mi>
+      </m:msub>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mi>n</m:mi>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:mi mathvariant="normal">&#x2026;</m:mi>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mi>n</m:mi>
+        </m:msub>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mo>&#x222B;</m:mo>
+      <m:msub>
+       <m:mi>V</m:mi>
+       <m:mi>n</m:mi>
+      </m:msub>
+     </m:msub>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:munderover>
+          <m:mo movablelimits="false">&#x2211;</m:mo>
+          <m:mrow>
+           <m:mi>k</m:mi>
+           <m:mo>=</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mi>n</m:mi>
+         </m:munderover>
+         <m:msub>
+          <m:mi>t</m:mi>
+          <m:mi>k</m:mi>
+         </m:msub>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:msub>
+        <m:mi>z</m:mi>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msub>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:munderover>
+      <m:msubsup>
+       <m:mi>t</m:mi>
+       <m:mi>k</m:mi>
+       <m:mrow>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msubsup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>t</m:mi>
+        <m:mi>k</m:mi>
+       </m:msub>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mrow>
+          <m:mi>n</m:mi>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>1</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mn>2</m:mn>
+        </m:msub>
+        <m:mo>+</m:mo>
+        <m:mi mathvariant="normal">&#x2026;</m:mi>
+        <m:mo>+</m:mo>
+        <m:msub>
+         <m:mi>z</m:mi>
+         <m:mrow>
+          <m:mi>n</m:mi>
+          <m:mo>+</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+        </m:msub>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h5>Selberg-type Integrals</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0394;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:msub>
+        <m:mi>t</m:mi>
+        <m:mn>1</m:mn>
+       </m:msub>
+       <m:mo>,</m:mo>
+       <m:msub>
+        <m:mi>t</m:mi>
+        <m:mn>2</m:mn>
+       </m:msub>
+       <m:mo>,</m:mo>
+       <m:mi mathvariant="normal">&#x2026;</m:mi>
+       <m:mo>,</m:mo>
+       <m:msub>
+        <m:mi>t</m:mi>
+        <m:mi>n</m:mi>
+       </m:msub>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munder>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>&#x2264;</m:mo>
+       <m:mi>j</m:mi>
+       <m:mo>&lt;</m:mo>
+       <m:mi>k</m:mi>
+       <m:mo>&#x2264;</m:mo>
+       <m:mi>n</m:mi>
+      </m:mrow>
+     </m:munder>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:msub>
+       <m:mi>t</m:mi>
+       <m:mi>j</m:mi>
+      </m:msub>
+      <m:mo>-</m:mo>
+      <m:msub>
+       <m:mi>t</m:mi>
+       <m:mi>k</m:mi>
+      </m:msub>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>Then
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mo>&#x222B;</m:mo>
+      <m:msup>
+       <m:mrow>
+        <m:mo>[</m:mo>
+        <m:mrow>
+         <m:mn>0</m:mn>
+         <m:mo>,</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>]</m:mo>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:msub>
+     <m:msub>
+      <m:mi>t</m:mi>
+      <m:mn>1</m:mn>
+     </m:msub>
+     <m:msub>
+      <m:mi>t</m:mi>
+      <m:mn>2</m:mn>
+     </m:msub>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:msub>
+      <m:mi>t</m:mi>
+      <m:mi>m</m:mi>
+     </m:msub>
+     <m:msup>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0394;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:msub>
+           <m:mi>t</m:mi>
+           <m:mn>1</m:mn>
+          </m:msub>
+          <m:mo>,</m:mo>
+          <m:mi mathvariant="normal">&#x2026;</m:mi>
+          <m:mo>,</m:mo>
+          <m:msub>
+           <m:mi>t</m:mi>
+           <m:mi>n</m:mi>
+          </m:msub>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>|</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>c</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:munderover>
+      <m:msubsup>
+       <m:mi>t</m:mi>
+       <m:mi>k</m:mi>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msubsup>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:msub>
+          <m:mi>t</m:mi>
+          <m:mi>k</m:mi>
+         </m:msub>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>b</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>t</m:mi>
+        <m:mi>k</m:mi>
+       </m:msub>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mn>1</m:mn>
+           <m:mo>+</m:mo>
+           <m:mi>c</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:mfrac>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>m</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>n</m:mi>
+           <m:mo>-</m:mo>
+           <m:mi>k</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mi>c</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:mi>n</m:mi>
+           </m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>k</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mi>c</m:mi>
+        </m:mrow>
+       </m:mrow>
+      </m:mfrac>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x220F;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:munderover>
+       <m:mfrac>
+        <m:mrow>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x0393;</m:mi>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mrow>
+            <m:mi>a</m:mi>
+            <m:mo>+</m:mo>
+            <m:mrow>
+             <m:mrow>
+              <m:mo>(</m:mo>
+              <m:mrow>
+               <m:mi>n</m:mi>
+               <m:mo>-</m:mo>
+               <m:mi>k</m:mi>
+              </m:mrow>
+              <m:mo>)</m:mo>
+             </m:mrow>
+             <m:mi>c</m:mi>
+            </m:mrow>
+           </m:mrow>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x0393;</m:mi>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mrow>
+            <m:mi>b</m:mi>
+            <m:mo>+</m:mo>
+            <m:mrow>
+             <m:mrow>
+              <m:mo>(</m:mo>
+              <m:mrow>
+               <m:mi>n</m:mi>
+               <m:mo>-</m:mo>
+               <m:mi>k</m:mi>
+              </m:mrow>
+              <m:mo>)</m:mo>
+             </m:mrow>
+             <m:mi>c</m:mi>
+            </m:mrow>
+           </m:mrow>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x0393;</m:mi>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mrow>
+            <m:mn>1</m:mn>
+            <m:mo>+</m:mo>
+            <m:mrow>
+             <m:mi>k</m:mi>
+             <m:mi>c</m:mi>
+            </m:mrow>
+           </m:mrow>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+        </m:mrow>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>a</m:mi>
+           <m:mo>+</m:mo>
+           <m:mi>b</m:mi>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mrow>
+             <m:mo>(</m:mo>
+             <m:mrow>
+              <m:mrow>
+               <m:mn>2</m:mn>
+               <m:mi>n</m:mi>
+              </m:mrow>
+              <m:mo>-</m:mo>
+              <m:mi>k</m:mi>
+              <m:mo>-</m:mo>
+              <m:mn>1</m:mn>
+             </m:mrow>
+             <m:mo>)</m:mo>
+            </m:mrow>
+            <m:mi>c</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mfrac>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>provided that
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x211C;</m:mi>
+   <m:mi>a</m:mi>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>b</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>c</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mrow>
+     <m:mo>min</m:mo>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac bevelled="true">
+        <m:mn>1</m:mn>
+        <m:mi>n</m:mi>
+       </m:mfrac>
+       <m:mo>,</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x211C;</m:mi>
+        <m:mfrac bevelled="true">
+         <m:mi>a</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>n</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>,</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x211C;</m:mi>
+        <m:mfrac bevelled="true">
+         <m:mi>b</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>n</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</p>
+
+<p>Secondly,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mo>&#x222B;</m:mo>
+      <m:msup>
+       <m:mrow>
+        <m:mo>[</m:mo>
+        <m:mrow>
+         <m:mn>0</m:mn>
+         <m:mo>,</m:mo>
+         <m:mi mathvariant="normal">&#x221E;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:msub>
+     <m:msub>
+      <m:mi>t</m:mi>
+      <m:mn>1</m:mn>
+     </m:msub>
+     <m:msub>
+      <m:mi>t</m:mi>
+      <m:mn>2</m:mn>
+     </m:msub>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:msub>
+      <m:mi>t</m:mi>
+      <m:mi>m</m:mi>
+     </m:msub>
+     <m:msup>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0394;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:msub>
+           <m:mi>t</m:mi>
+           <m:mn>1</m:mn>
+          </m:msub>
+          <m:mo>,</m:mo>
+          <m:mi mathvariant="normal">&#x2026;</m:mi>
+          <m:mo>,</m:mo>
+          <m:msub>
+           <m:mi>t</m:mi>
+           <m:mi>n</m:mi>
+          </m:msub>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>|</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>c</m:mi>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:munderover>
+      <m:msubsup>
+       <m:mi>t</m:mi>
+       <m:mi>k</m:mi>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msubsup>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:msub>
+         <m:mi>t</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>t</m:mi>
+        <m:mi>k</m:mi>
+       </m:msub>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi>m</m:mi>
+     </m:munderover>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>n</m:mi>
+          <m:mo>-</m:mo>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>c</m:mi>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mfrac>
+      <m:mrow>
+       <m:msubsup>
+        <m:mo>&#x220F;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:msubsup>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mo></m:mo>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>a</m:mi>
+          <m:mo>+</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mi>n</m:mi>
+             <m:mo>-</m:mo>
+             <m:mi>k</m:mi>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+           <m:mi>c</m:mi>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>+</m:mo>
+          <m:mrow>
+           <m:mi>k</m:mi>
+           <m:mi>c</m:mi>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mn>1</m:mn>
+           <m:mo>+</m:mo>
+           <m:mi>c</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>when
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>c</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mrow>
+     <m:mo>min</m:mo>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac bevelled="true">
+        <m:mn>1</m:mn>
+        <m:mi>n</m:mi>
+       </m:mfrac>
+       <m:mo>,</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x211C;</m:mi>
+        <m:mfrac bevelled="true">
+         <m:mi>a</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>n</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</p>
+
+<p>Thirdly,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mfrac bevelled="true">
+        <m:mi>n</m:mi>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:msup>
+     </m:mfrac>
+     <m:mrow>
+      <m:msub>
+       <m:mo>&#x222B;</m:mo>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi mathvariant="normal">&#x221E;</m:mi>
+          </m:mrow>
+          <m:mo>,</m:mo>
+          <m:mi mathvariant="normal">&#x221E;</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:msup>
+      </m:msub>
+      <m:msup>
+       <m:mrow>
+        <m:mo>|</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0394;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:msub>
+            <m:mi>t</m:mi>
+            <m:mn>1</m:mn>
+           </m:msub>
+           <m:mo>,</m:mo>
+           <m:mi mathvariant="normal">&#x2026;</m:mi>
+           <m:mo>,</m:mo>
+           <m:msub>
+            <m:mi>t</m:mi>
+            <m:mi>n</m:mi>
+           </m:msub>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>|</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>c</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x220F;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:munderover>
+       <m:mrow>
+        <m:mi>exp</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mrow>
+           <m:mstyle displaystyle="false">
+            <m:mfrac>
+             <m:mn>1</m:mn>
+             <m:mn>2</m:mn>
+            </m:mfrac>
+           </m:mstyle>
+           <m:msubsup>
+            <m:mi>t</m:mi>
+            <m:mi>k</m:mi>
+            <m:mn>2</m:mn>
+           </m:msubsup>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2146;</m:mi>
+        <m:msub>
+         <m:mi>t</m:mi>
+         <m:mi>k</m:mi>
+        </m:msub>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:msubsup>
+       <m:mo>&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msubsup>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mi>c</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>+</m:mo>
+          <m:mi>c</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi>n</m:mi>
+     </m:msup>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h5>Dyson's Integral</h5>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:mfrac>
+     <m:mrow>
+      <m:msub>
+       <m:mo>&#x222B;</m:mo>
+       <m:msup>
+        <m:mrow>
+         <m:mo>[</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>&#x03C0;</m:mi>
+          </m:mrow>
+          <m:mo>,</m:mo>
+          <m:mi>&#x03C0;</m:mi>
+         </m:mrow>
+         <m:mo>]</m:mo>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:msup>
+      </m:msub>
+      <m:munder>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi>j</m:mi>
+        <m:mo>&lt;</m:mo>
+        <m:mi>k</m:mi>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi>n</m:mi>
+       </m:mrow>
+      </m:munder>
+      <m:msup>
+       <m:mrow>
+        <m:mo>|</m:mo>
+        <m:mrow>
+         <m:msup>
+          <m:mi mathvariant="normal">&#x2147;</m:mi>
+          <m:mrow>
+           <m:mi mathvariant="normal">&#x2148;</m:mi>
+           <m:msub>
+            <m:mi>&#x03B8;</m:mi>
+            <m:mi>j</m:mi>
+           </m:msub>
+          </m:mrow>
+         </m:msup>
+         <m:mo>-</m:mo>
+         <m:msup>
+          <m:mi mathvariant="normal">&#x2147;</m:mi>
+          <m:mrow>
+           <m:mi mathvariant="normal">&#x2148;</m:mi>
+           <m:msub>
+            <m:mi>&#x03B8;</m:mi>
+            <m:mi>k</m:mi>
+           </m:msub>
+          </m:mrow>
+         </m:msup>
+        </m:mrow>
+        <m:mo>|</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>b</m:mi>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>&#x03B8;</m:mi>
+        <m:mn>1</m:mn>
+       </m:msub>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>&#x03B8;</m:mi>
+        <m:mi>n</m:mi>
+       </m:msub>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi>b</m:mi>
+         <m:mi>n</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>+</m:mo>
+          <m:mi>b</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi>n</m:mi>
+     </m:msup>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>b</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mrow>
+    <m:mfrac bevelled="true">
+     <m:mn>1</m:mn>
+     <m:mi>n</m:mi>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfnotation.xhtml}
+<<dlmfnotation.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Digital Library of Mathematical Functions<br/>
+                      The Gamma Function -- Notation
+  </div>
+  <hr/>
+ <div class="content">
+  <div class="section">
+   <h3>Notation</h3>
+   <div class="table" id="T1">
+    <table align="center">
+     <tbody>
+      <tr>
+       <th align="left">
+        <m:math display="inline">
+         <m:mrow>
+          <m:mi>j</m:mi>
+          <m:mo>,</m:mo>
+          <m:mi>m</m:mi>
+          <m:mo>,</m:mo>
+          <m:mi>n</m:mi>
+         </m:mrow>
+        </m:math>
+       </th>
+       <td align="justify">nonnegative integers.</td>
+      </tr>
+      <tr>
+       <th align="left">
+        <m:math display="inline">
+         <m:mi>k</m:mi>
+        </m:math>
+       </th>
+       <td>except in <a href="dlmfphysicalapplications.xhtml">
+                        Physical Applications</a>
+       </td>
+      </tr>
+      <tr>
+       <th align="left">
+        <m:math display="inline">
+         <m:mrow>
+          <m:mi>x</m:mi>
+          <m:mo>,</m:mo>
+          <m:mi>y</m:mi>
+         </m:mrow>
+        </m:math>
+       </th>
+       <td align="justify">real variables.</td>
+      </tr>
+      <tr>
+       <th align="left">
+        <m:math display="inline">
+         <m:mrow>
+          <m:mi>z</m:mi>
+          <m:mo>=</m:mo>
+          <m:mrow>
+           <m:mi>x</m:mi>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mi mathvariant="normal">&#x2148;</m:mi>
+            <m:mi>y</m:mi>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+        </m:math>
+       </th>
+      <td align="justify">complex variable.</td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>b</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>q</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>s</m:mi>
+         <m:mo>,</m:mo>
+         <m:mi>w</m:mi>
+        </m:mrow>
+       </m:math>
+      </th>
+      <td align="justify">real or complex variables with
+       <m:math display="inline">
+        <m:mrow>
+         <m:mrow>
+          <m:mo>&#x2223;</m:mo>
+          <m:mi>q</m:mi>
+          <m:mo>&#x2223;</m:mo>
+         </m:mrow>
+         <m:mo>&lt;</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:math>.
+      </td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mi>&#x03B4;</m:mi>
+       </m:math>
+      </th>
+      <td align="justify">arbitrary small positive constant.</td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mi mathvariant="normal">&#x2102;</m:mi>
+       </m:math>
+      </th>
+      <td align="justify">complex plane (excluding infinity).</td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mi mathvariant="normal">&#x211D;</m:mi>
+       </m:math>
+      </th>
+      <td align="justify">real line (excluding infinity).</td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mstyle scriptlevel="+1">
+          <m:mtable rowspacing="0.2ex" columnspacing="0.4em">
+           <m:mtr>
+            <m:mtd>
+             <m:mi>n</m:mi>
+            </m:mtd>
+           </m:mtr>
+           <m:mtr>
+            <m:mtd>
+             <m:mi>m</m:mi>
+            </m:mtd>
+           </m:mtr>
+          </m:mtable>
+         </m:mstyle>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:math>
+      </th>
+      <td align="justify">binomial coefficient
+       <m:math display="inline">
+        <m:mfrac>
+         <m:mrow>
+          <m:mi>n</m:mi>
+          <m:mi mathvariant="normal">!</m:mi>
+         </m:mrow>
+         <m:mrow>
+          <m:mrow>
+           <m:mi>m</m:mi>
+           <m:mi mathvariant="normal">!</m:mi>
+          </m:mrow>
+          <m:mrow>
+           <m:mrow>
+            <m:mo>(</m:mo>
+            <m:mrow>
+             <m:mi>n</m:mi>
+             <m:mo>-</m:mo>
+             <m:mi>m</m:mi>
+            </m:mrow>
+            <m:mo>)</m:mo>
+           </m:mrow>
+           <m:mi mathvariant="normal">!</m:mi>
+          </m:mrow>
+         </m:mrow>
+        </m:mfrac>
+       </m:math>.
+      </td>
+     </tr>
+     <tr>
+      <th align="left">empty sums</th>
+      <td align="justify">zero.</td>
+     </tr>
+     <tr>
+      <th align="left">empty products</th>
+      <td align="justify">unity.</td>
+     </tr>
+    </tbody>
+   </table>
+  </div>
+
+  <div class="para" id="p1">
+   <p>The main functions treated in this chapter are the gamma function
+    <m:math display="inline">
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:math>,the psi function
+    <m:math display="inline">
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:math>,the beta function
+    <m:math display="inline">
+     <m:mrow>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>,</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:math>, and the
+    <m:math display="inline">
+     <m:mi>q</m:mi>
+    </m:math>-gamma function
+    <m:math display="inline">
+     <m:mrow>
+      <m:msub>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mi>q</m:mi>
+      </m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:math>.
+   </p>
+  </div>
+
+  <div class="para" id="p2">
+   <p>The notation
+    <m:math display="inline">
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:math> is due to Legendre. Alternative notations for this functio=
n are:
+    <m:math display="inline">
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x03A0;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:math> (Gauss) and
+    <m:math display="inline">
+     <m:mrow>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>z</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+    </m:math>. Alternative notations for the psi function are:
+   </p>
+  </div>
+
+  <div class="table" id="T2">
+   <table align="center">
+    <thead>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x03A8;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:math>
+      </th>
+      <th align="left">Gauss;
+        <a href="http://dlmf.nist.gov/Contents/bib/J#jahnke:1945:tof">
+         Jahnke and Emde(1945)
+        </a>
+      </th>
+     </tr>
+    </thead>
+    <tbody>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mrow>
+         <m:mi>&#x03A8;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mi>z</m:mi>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:math>
+      </th>
+      <td align="left">
+        <a href="http://dlmf.nist.gov/Contents/bib/W#whittaker:1927:cm=
a">
+         Whittaker and Watson(1927)
+        </a>
+      </td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x03A8;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mi>z</m:mi>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:math>
+      </th>
+      <td align="left">
+        <a href="http://dlmf.nist.gov/Contents/bib/D#davis:1933:thm">
+          Davis(1933)
+        </a>
+      </td>
+     </tr>
+     <tr>
+      <th align="left">
+       <m:math display="inline">
+        <m:mrow>
+         <m:mi mathvariant="sans-serif">F</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>z</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:math>
+      </th>
+      <td align="left">
+        <a href="http://dlmf.nist.gov/Contents/bib/P#pairman:1919:tdt"=
>
+         Pairman(1919)
+        </a>
+      </td>
+     </tr>
+    </tbody>
+   </table>
+  </div>
+ </div>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfphysicalapplications.xhtml}
+<<dlmfphysicalapplications.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Physical Applications
+  </div>
+  <hr/>
+<h3>Physical Applications</h3>
+
+<p>Suppose the potential energy of a gas of
+ <m:math display="inline">
+  <m:mi>n</m:mi>
+ </m:math> point charges with positions
+ <m:math display="inline">
+  <m:mrow>
+   <m:msub>
+    <m:mi>x</m:mi>
+    <m:mn>1</m:mn>
+   </m:msub>
+   <m:mo>,</m:mo>
+   <m:msub>
+    <m:mi>x</m:mi>
+    <m:mn>2</m:mn>
+   </m:msub>
+   <m:mo>,</m:mo>
+   <m:mi mathvariant="normal">&#x2026;</m:mi>
+   <m:mo>,</m:mo>
+   <m:msub>
+    <m:mi>x</m:mi>
+    <m:mi>n</m:mi>
+   </m:msub>
+  </m:mrow>
+ </m:math> and free to move on the infinite line
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>-</m:mo>
+    <m:mi mathvariant="normal">&#x221E;</m:mi>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math>, is given by
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>W</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x2211;</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2113;</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:munderover>
+       <m:msubsup>
+        <m:mi>x</m:mi>
+        <m:mi mathvariant="normal">&#x2113;</m:mi>
+        <m:mn>2</m:mn>
+       </m:msubsup>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:munder>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi mathvariant="normal">&#x2113;</m:mi>
+        <m:mo>&lt;</m:mo>
+        <m:mi>j</m:mi>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi>n</m:mi>
+       </m:mrow>
+      </m:munder>
+      <m:mi>ln</m:mi>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mrow>
+        <m:msub>
+         <m:mi>x</m:mi>
+         <m:mi mathvariant="normal">&#x2113;</m:mi>
+        </m:msub>
+        <m:mo>-</m:mo>
+        <m:msub>
+         <m:mi>x</m:mi>
+         <m:mi>j</m:mi>
+        </m:msub>
+       </m:mrow>
+       <m:mo>|</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>The probability density of the positions when the gas is in thermodyn=
amic
+   equilibrium is:
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>P</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:msub>
+        <m:mi>x</m:mi>
+        <m:mn>1</m:mn>
+       </m:msub>
+       <m:mo>,</m:mo>
+       <m:mi mathvariant="normal">&#x2026;</m:mi>
+       <m:mo>,</m:mo>
+       <m:msub>
+        <m:mi>x</m:mi>
+        <m:mi>n</m:mi>
+       </m:msub>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi>C</m:mi>
+     <m:mrow>
+      <m:mi>exp</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mfrac bevelled="true">
+         <m:mi>W</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>k</m:mi>
+           <m:mi>T</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mfrac>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mi>k</m:mi>
+ </m:math> is the Boltzmann constant, 
+ <m:math display="inline">
+  <m:mi>T</m:mi>
+ </m:math> the temperature and 
+ <m:math display="inline">
+  <m:mi>C</m:mi>
+ </m:math> a constant.
+ Then the partition function (with
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03B2;</m:mi>
+   <m:mo>=</m:mo>
+   <m:mfrac bevelled="true">
+    <m:mn>1</m:mn>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mi>k</m:mi>
+      <m:mi>T</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mfrac>
+  </m:mrow>
+ </m:math>) is given by
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mi>n</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>&#x03B2;</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msub>
+      <m:mo>&#x222B;</m:mo>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x211D;</m:mi>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:msub>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x2147;</m:mi>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mi>&#x03B2;</m:mi>
+        <m:mi>W</m:mi>
+       </m:mrow>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x2146;</m:mi>
+      <m:mi>x</m:mi>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>&#x03C0;</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mfrac bevelled="true">
+         <m:mi>n</m:mi>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:msup>
+       <m:msup>
+        <m:mi>&#x03B2;</m:mi>
+        <m:mrow>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mfrac bevelled="true">
+            <m:mi>n</m:mi>
+            <m:mn>2</m:mn>
+           </m:mfrac>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>-</m:mo>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mfrac bevelled="true">
+           <m:mrow>
+            <m:mi>&#x03B2;</m:mi>
+            <m:mi>n</m:mi>
+            <m:mrow>
+             <m:mo>(</m:mo>
+             <m:mrow>
+              <m:mi>n</m:mi>
+              <m:mo>-</m:mo>
+              <m:mn>1</m:mn>
+             </m:mrow>
+             <m:mo>)</m:mo>
+            </m:mrow>
+           </m:mrow>
+           <m:mn>4</m:mn>
+          </m:mfrac>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:mo>&#x00D7;</m:mo>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x0393;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mn>1</m:mn>
+           <m:mo>+</m:mo>
+           <m:mrow>
+            <m:mstyle displaystyle="false">
+             <m:mfrac>
+              <m:mn>1</m:mn>
+              <m:mn>2</m:mn>
+             </m:mfrac>
+            </m:mstyle>
+            <m:mi>&#x03B2;</m:mi>
+           </m:mrow>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mi>n</m:mi>
+       </m:mrow>
+      </m:msup>
+     </m:mrow>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x220F;</m:mo>
+       <m:mrow>
+        <m:mi>j</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:munderover>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+         <m:mi>j</m:mi>
+         <m:mi>&#x03B2;</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For
+ <m:math display="inline">
+  <m:mi>n</m:mi>
+ </m:math> charges free to move on a circular wire of radius
+ <m:math display="inline">
+  <m:mn>1</m:mn>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mi>W</m:mi>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:munder>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi mathvariant="normal">&#x2113;</m:mi>
+        <m:mo>&lt;</m:mo>
+        <m:mi>j</m:mi>
+        <m:mo>&#x2264;</m:mo>
+        <m:mi>n</m:mi>
+       </m:mrow>
+      </m:munder>
+      <m:mi>ln</m:mi>
+      <m:mrow>
+       <m:mo>|</m:mo>
+       <m:mrow>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:msub>
+           <m:mi>&#x03B8;</m:mi>
+           <m:mi mathvariant="normal">&#x2113;</m:mi>
+          </m:msub>
+         </m:mrow>
+        </m:msup>
+        <m:mo>-</m:mo>
+        <m:msup>
+         <m:mi mathvariant="normal">&#x2147;</m:mi>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:msub>
+           <m:mi>&#x03B8;</m:mi>
+           <m:mi>j</m:mi>
+          </m:msub>
+         </m:mrow>
+        </m:msup>
+       </m:mrow>
+       <m:mo>|</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>and the partition function is given by</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mi>n</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>&#x03B2;</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>&#x03C0;</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:msup>
+     </m:mfrac>
+     <m:mrow>
+      <m:msub>
+       <m:mo>&#x222B;</m:mo>
+       <m:msup>
+        <m:mrow>
+         <m:mo>[</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mo>-</m:mo>
+           <m:mi>&#x03C0;</m:mi>
+          </m:mrow>
+          <m:mo>,</m:mo>
+          <m:mi>&#x03C0;</m:mi>
+         </m:mrow>
+         <m:mo>]</m:mo>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:msup>
+      </m:msub>
+      <m:msup>
+       <m:mi mathvariant="normal">&#x2147;</m:mi>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi>&#x03B2;</m:mi>
+         <m:mi>W</m:mi>
+        </m:mrow>
+       </m:mrow>
+      </m:msup>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>&#x03B8;</m:mi>
+        <m:mn>1</m:mn>
+       </m:msub>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x22EF;</m:mi>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:msub>
+        <m:mi>&#x03B8;</m:mi>
+        <m:mi>n</m:mi>
+       </m:msub>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+         <m:mi>n</m:mi>
+         <m:mi>&#x03B2;</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>1</m:mn>
+          <m:mo>+</m:mo>
+          <m:mrow>
+           <m:mstyle displaystyle="false">
+            <m:mfrac>
+             <m:mn>1</m:mn>
+             <m:mn>2</m:mn>
+            </m:mfrac>
+           </m:mstyle>
+           <m:mi>&#x03B2;</m:mi>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>n</m:mi>
+      </m:mrow>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfpolygammafunctions.xhtml}
+<<dlmfpolygammafunctions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Polygamma Functions
+  </div>
+  <hr/>
+<h3>Polygamma Functions</h3>
+
+<p>The functions
+ <m:math display="inline">
+  <m:mrow>
+   <m:msup>
+    <m:mi>&#x03C8;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>n</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:msup>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>1</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>, are called the <em>polygamma functions</em>. In particular,
+ <m:math display="inline">
+  <m:mrow>
+   <m:msup>
+    <m:mi>&#x03C8;</m:mi>
+    <m:mo>&#x2032;</m:mo>
+   </m:msup>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math> is the <em>trigamma function</em>;
+ <m:math display="inline">
+  <m:msup>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mi>&#x2032;</m:mi>
+    <m:mi>&#x2032;</m:mi>
+   </m:mrow>
+  </m:msup></m:math>,
+ <m:math display="inline">
+  <m:msup>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mn>3</m:mn>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:msup>
+ </m:math>,
+ <m:math display="inline">
+  <m:msup>
+   <m:mi>&#x03C8;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mn>4</m:mn>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:msup>
+ </m:math> are the <em>tetra-,</em> <em>penta-,</em> and
+ <em>hexagamma functions</em> respectively. Most properties of these
+ functions follow straightforwardly by differentiation of properties
+ of the psi function. This includes asymptotic expansions.
+</p>
+
+<p>In the second and third equations,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>1</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>3</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>; for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03B6;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>n</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mo>&#x2032;</m:mo>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>0</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mn>2</m:mn>
+      </m:msup>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>n</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>1</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi>n</m:mi>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+     <m:mrow>
+      <m:mi>&#x03B6;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>n</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>n</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:msup>
+     <m:mrow>
+      <m:mi>n</m:mi>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:msup>
+        <m:mn>2</m:mn>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mrow>
+      <m:mi>&#x03B6;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>n</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mo>&#x2032;</m:mo>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mstyle displaystyle="false">
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:mstyle>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:msup>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mn>2</m:mn>
+      </m:msup>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>4</m:mn>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x2211;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mi>n</m:mi>
+       </m:munderover>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:msup>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:mi>k</m:mi>
+           </m:mrow>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+         <m:mn>2</m:mn>
+        </m:msup>
+       </m:mfrac>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>As
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2192;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math> in
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mrow>
+     <m:mi>ph</m:mi>
+     <m:mspace width="0.2em"/>
+     <m:mi>z</m:mi>
+    </m:mrow>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2264;</m:mo>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B4;</m:mi>
+    </m:mrow>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:none/>
+      <m:mo>&lt;</m:mo>
+      <m:mi>&#x03C0;</m:mi>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mo>&#x2032;</m:mo>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&#x223C;</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mi>z</m:mi>
+     </m:mfrac>
+     <m:mo>+</m:mo>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:msup>
+        <m:mi>z</m:mi>
+        <m:mn>2</m:mn>
+       </m:msup>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:msub>
+        <m:mi>B</m:mi>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>k</m:mi>
+        </m:mrow>
+       </m:msub>
+       <m:msup>
+        <m:mi>z</m:mi>
+        <m:mrow>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mi>k</m:mi>
+         </m:mrow>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfqgammaandbetafunctions.xhtml}
+<<dlmfqgammaandbetafunctions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- q-Gamma and Beta Functions
+  </div>
+  <hr/>
+<h3>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">q</m:mi>
+ </m:math>-Gamma and Beta Functions
+</h3>
+
+<ul>
+ <li>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">q</m:mi>
+ </m:math>-Factorials</li>
+ <li>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">q</m:mi>
+ </m:math>-Gamma Function</li>
+ <li>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">q</m:mi>
+ </m:math>-Beta Function</li>
+</ul>
+
+<h4>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">q</m:mi>
+ </m:math>-Factorials</h4>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mo>;</m:mo>
+       <m:mi>q</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mi>n</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>0</m:mn>
+      </m:mrow>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+     </m:munderover>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:msup>
+        <m:mi>q</m:mi>
+        <m:mi>k</m:mi>
+       </m:msup>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>1</m:mn>
+    <m:mo>,</m:mo>
+    <m:mn>2</m:mn>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mi>n</m:mi>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+     <m:mi>q</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>1</m:mn>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>+</m:mo>
+       <m:mi>q</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mi mathvariant="normal">&#x22EF;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>+</m:mo>
+       <m:mi>q</m:mi>
+       <m:mo>+</m:mo>
+       <m:mi mathvariant="normal">&#x2026;</m:mi>
+       <m:mo>+</m:mo>
+       <m:msup>
+        <m:mi>q</m:mi>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>q</m:mi>
+        <m:mspace width="0.2em"/>
+        <m:mo>;</m:mo>
+        <m:mi>q</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi>n</m:mi>
+     </m:msub>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>q</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>n</m:mi>
+      </m:mrow>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>When
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mi>q</m:mi>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mspace width="0.2em"/>
+       <m:mo>;</m:mo>
+       <m:mi>q</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mi mathvariant="normal">&#x221E;</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x220F;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>0</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:mo>(</m:mo>
+     <m:mrow>
+      <m:mn>1</m:mn>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:msup>
+        <m:mi>q</m:mi>
+        <m:mi>k</m:mi>
+       </m:msup>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h4>
+ <m:math display="inline">
+ <m:mi mathvariant="bold-italic">q</m:mi></m:math>-Gamma Function</h4>
+
+<p>When
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>q</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac bevelled="true">
+     <m:mrow>
+      <m:msub>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>q</m:mi>
+         <m:mspace width="0.2em"/>
+         <m:mo>;</m:mo>
+         <m:mi>q</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msub>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>-</m:mo>
+         <m:mi>q</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:msup>
+     </m:mrow>
+     <m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:msup>
+         <m:mi>q</m:mi>
+         <m:mi>z</m:mi>
+        </m:msup>
+        <m:mspace width="0.2em"/>
+        <m:mo>;</m:mo>
+        <m:mi>q</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:msub>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>1</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>2</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mrow>
+      <m:mi>n</m:mi>
+      <m:mi mathvariant="normal">!</m:mi>
+     </m:mrow>
+     <m:mi>q</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>z</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>-</m:mo>
+       <m:msup>
+        <m:mi>q</m:mi>
+        <m:mi>z</m:mi>
+       </m:msup>
+      </m:mrow>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>-</m:mo>
+       <m:mi>q</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mrow>
+      <m:msub>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mi>q</m:mi>
+      </m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>Also,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mrow>
+    <m:msub>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mi>q</m:mi>
+    </m:msub>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>x</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math> is convex for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>, and the analog of the
+ <a href="dlmffunctionrelations.xhtml#bohrmolleruptheorem">
+  Bohr-Mollerup theorem
+ </a> holds.
+</p>
+
+<p>If
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>q</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mi>r</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>, then
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>x</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&lt;</m:mo>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>r</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>x</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>when
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math> or when
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>x</m:mi>
+   <m:mo>&gt;</m:mo>
+   <m:mn>2</m:mn>
+  </m:mrow>
+ </m:math>, and
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>x</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>&gt;</m:mo>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mi>r</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>x</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>when
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>1</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>x</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>2</m:mn>
+  </m:mrow>
+ </m:math>.
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:munder>
+      <m:mo movablelimits="false">lim</m:mo>
+      <m:mrow>
+       <m:mi>q</m:mi>
+       <m:mo>&#x2192;</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:munder>
+     <m:mrow>
+      <m:msub>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mi>q</m:mi>
+      </m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For generalized asymptotic expansions of
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>ln</m:mi>
+   <m:mspace width="0.2em"/>
+   <m:mrow>
+    <m:msub>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mi>q</m:mi>
+    </m:msub>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:mi>z</m:mi>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math> as
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&#x2192;</m:mo>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math> see
+ <a href="http://dlmf.nist.gov/Contents/bib/O#oldedaalhuis:1994:aef">
+  Olde Daalhuis(1994)
+ </a> and
+ <a href="http://dlmf.nist.gov/Contents/bib/M#moak:1984:tqa">
+  Moak(1984)
+ </a>.
+</p>
+
+<h4>
+ <m:math display="inline">
+  <m:mi mathvariant="bold-italic">q</m:mi>
+ </m:math>-Beta Function
+</h4>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mrow>
+       <m:msub>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mi>q</m:mi>
+       </m:msub>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>a</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mrow>
+       <m:msub>
+        <m:mi mathvariant="normal">&#x0393;</m:mi>
+        <m:mi>q</m:mi>
+       </m:msub>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>b</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:msub>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mi>q</m:mi>
+      </m:msub>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>a</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>b</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msub>
+      <m:mi mathvariant="normal">B</m:mi>
+      <m:mi>q</m:mi>
+     </m:msub>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>a</m:mi>
+       <m:mo>,</m:mo>
+       <m:mi>b</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:msubsup>
+      <m:mo>&#x222B;</m:mo>
+      <m:mn>0</m:mn>
+      <m:mn>1</m:mn>
+     </m:msubsup>
+     <m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi>t</m:mi>
+        <m:mrow>
+         <m:mi>a</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:msup>
+       <m:msub>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mrow>
+           <m:mi>t</m:mi>
+           <m:mi>q</m:mi>
+          </m:mrow>
+          <m:mspace width="0.2em"/>
+          <m:mo>;</m:mo>
+          <m:mi>q</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi mathvariant="normal">&#x221E;</m:mi>
+       </m:msub>
+      </m:mrow>
+      <m:msub>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>t</m:mi>
+          <m:msup>
+           <m:mi>q</m:mi>
+           <m:mi>b</m:mi>
+          </m:msup>
+         </m:mrow>
+         <m:mo>;</m:mo>
+         <m:mi>q</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:msub>
+     </m:mfrac>
+     <m:mrow>
+      <m:msub>
+       <m:mi mathvariant="normal">&#x2146;</m:mi>
+       <m:mi>q</m:mi>
+      </m:msub>
+      <m:mi>t</m:mi>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>q</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>a</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mi mathvariant="normal">&#x211C;</m:mi>
+    <m:mi>b</m:mi>
+   </m:mrow>
+   <m:mo>&gt;</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfseriesexpansions.xhtml}
+<<dlmfseriesexpansions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Series Expansions
+  </div>
+  <hr/>
+<h3>Series Expansions</h3>
+<h6>Contents</h6>
+<ul>
+ <li>Maclaurin Series</li>
+ <li>Other Series</li>
+</ul>
+<h4>Maclaurin Series</h4>
+<p>Throughout this subsection
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>&#x03B6;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mi>k</m:mi>
+    <m:mo>)</m:mo>
+  </m:mrow>
+  </m:mrow>
+ </m:math> is
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mfrac>
+     <m:mn>1</m:mn>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>z</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:msub>
+      <m:mi>c</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+     <m:msup>
+      <m:mi>z</m:mi>
+      <m:mi>k</m:mi>
+     </m:msup>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>where
+ <m:math display="inline">
+  <m:mrow>
+   <m:msub>
+    <m:mi>c</m:mi>
+    <m:mn>1</m:mn>
+   </m:msub>
+   <m:mo>=</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+
+ <m:math display="inline">
+  <m:mrow>
+   <m:msub>
+    <m:mi>c</m:mi>
+    <m:mn>2</m:mn>
+   </m:msub>
+   <m:mo>=</m:mo>
+   <m:mi>&#x03B3;</m:mi>
+  </m:mrow>
+ </m:math>, and
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>-</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:msub>
+      <m:mi>c</m:mi>
+      <m:mi>k</m:mi>
+     </m:msub>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>&#x03B3;</m:mi>
+         <m:msub>
+          <m:mi>c</m:mi>
+          <m:mrow>
+           <m:mi>k</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+         </m:msub>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mrow>
+          <m:mi>&#x03B6;</m:mi>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mn>2</m:mn>
+           <m:mo>)</m:mo>
+          </m:mrow>
+         </m:mrow>
+         <m:msub>
+          <m:mi>c</m:mi>
+          <m:mrow>
+           <m:mi>k</m:mi>
+           <m:mo>-</m:mo>
+           <m:mn>2</m:mn>
+          </m:mrow>
+         </m:msub>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>+</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>&#x03B6;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mn>3</m:mn>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:msub>
+         <m:mi>c</m:mi>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>-</m:mo>
+          <m:mn>3</m:mn>
+         </m:mrow>
+        </m:msub>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi mathvariant="normal">&#x2026;</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>k</m:mi>
+      </m:msup>
+      <m:mrow>
+       <m:mi>&#x03B6;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:msub>
+       <m:mi>c</m:mi>
+       <m:mn>1</m:mn>
+      </m:msub>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>k</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>3</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<p>For 15D numerical values of
+ <m:math display="inline">
+  <m:msub>
+   <m:mi>c</m:mi>
+   <m:mi>k</m:mi>
+  </m:msub>
+ </m:math> see
+ <a href="http://dlmf.nist.gov/Contents/bib/#abramowitz:1964:hmf">
+ Abramowitz and Stegun(1964)</a>(p.=C2;256), and
+for 31D values see
+<a href="http://dlmf.nist.gov/Contents/bib/W#wrench:1968:cts">
+   Wrench(1968)</a>.
+</p>
+
+<a name="equation3"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>ln</m:mi>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mn>1</m:mn>
+         <m:mo>+</m:mo>
+         <m:mi>z</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mi>z</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>-</m:mo>
+        <m:mi>&#x03B3;</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>2</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>k</m:mi>
+      </m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>&#x03B6;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mi>k</m:mi>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mfrac>
+       <m:msup>
+        <m:mi>z</m:mi>
+        <m:mi>k</m:mi>
+       </m:msup>
+       <m:mi>k</m:mi>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mn>2</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>+</m:mo>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>&#x03B3;</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>2</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+       <m:mi>k</m:mi>
+      </m:msup>
+      <m:mrow>
+       <m:mi>&#x03B6;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mi>k</m:mi>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:msup>
+       <m:mi>z</m:mi>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:msup>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>,
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mn>1</m:mn>
+       <m:mo>+</m:mo>
+       <m:mi>z</m:mi>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mn>2</m:mn>
+         <m:mi>z</m:mi>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>-</m:mo>
+       <m:mrow>
+        <m:mfrac>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+        <m:mrow>
+         <m:mi>cot</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>&#x03C0;</m:mi>
+           <m:mi>z</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>+</m:mo>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mrow>
+        <m:msup>
+         <m:mi>z</m:mi>
+         <m:mn>2</m:mn>
+        </m:msup>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+      </m:mfrac>
+      <m:mo>+</m:mo>
+      <m:mn>1</m:mn>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B3;</m:mi>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi>&#x03B6;</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:mi>k</m:mi>
+           </m:mrow>
+           <m:mo>+</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:msup>
+       <m:mi>z</m:mi>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>k</m:mi>
+       </m:mrow>
+      </m:msup>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="right">
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:mo>|</m:mo>
+    <m:mi>z</m:mi>
+    <m:mo>|</m:mo>
+   </m:mrow>
+   <m:mo>&lt;</m:mo>
+   <m:mn>2</m:mn>
+  </m:mrow>
+ </m:math>,
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>&#x00B1;</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>.
+</div>
+
+<p>For 20D numerical values of the coefficients of the Maclaurin series =
for
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi mathvariant="normal">&#x0393;</m:mi>
+   <m:mrow>
+    <m:mo>(</m:mo>
+    <m:mrow>
+     <m:mi>z</m:mi>
+     <m:mo>+</m:mo>
+     <m:mn>3</m:mn>
+    </m:mrow>
+    <m:mo>)</m:mo>
+   </m:mrow>
+  </m:mrow>
+</m:math> see
+<a href="http://dlmf.nist.gov/Contents/bib/L#luke:1969:sfa2">
+   Luke(1969)</a>(p.=C2;299).
+</p>
+
+<p>When
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>z</m:mi>
+   <m:mo>&#x2260;</m:mo>
+   <m:mrow>
+    <m:mn>0</m:mn>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>1</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mn>2</m:mn>
+    </m:mrow>
+    <m:mo>,</m:mo>
+    <m:mi mathvariant="normal">&#x2026;</m:mi>
+   </m:mrow>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<a name="equation6"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mi>z</m:mi>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>&#x03B3;</m:mi>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mi>z</m:mi>
+      </m:mfrac>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:mi>z</m:mi>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>k</m:mi>
+          <m:mo>+</m:mo>
+          <m:mi>z</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>&#x03B3;</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>-</m:mo>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>+</m:mo>
+         <m:mi>z</m:mi>
+        </m:mrow>
+       </m:mfrac>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>and
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mrow>
+         <m:mi>z</m:mi>
+         <m:mo>+</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mi>z</m:mi>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>2</m:mn>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>0</m:mn>
+       </m:mrow>
+       <m:mi mathvariant="normal">&#x221E;</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:msup>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mo>-</m:mo>
+          <m:mn>1</m:mn>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+        <m:mi>k</m:mi>
+       </m:msup>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>+</m:mo>
+        <m:mi>z</m:mi>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>Also,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x2111;</m:mi>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:mfrac>
+      <m:mi>y</m:mi>
+      <m:mrow>
+       <m:msup>
+        <m:mi>k</m:mi>
+        <m:mn>2</m:mn>
+       </m:msup>
+       <m:mo>+</m:mo>
+       <m:msup>
+        <m:mi>y</m:mi>
+        <m:mn>2</m:mn>
+       </m:msup>
+      </m:mrow>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmfsums.xhtml}
+<<dlmfsums.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Sums
+  </div>
+  <hr/>
+<h3>Sums</h3>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mo>-</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+      <m:mi>k</m:mi>
+     </m:msup>
+     <m:mrow>
+      <m:msup>
+       <m:mi>&#x03C8;</m:mi>
+       <m:mo>&#x2032;</m:mo>
+      </m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mi>k</m:mi>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mfrac>
+      <m:msup>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mn>2</m:mn>
+      </m:msup>
+      <m:mn>8</m:mn>
+     </m:mfrac>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:munderover>
+      <m:mo movablelimits="false">&#x2211;</m:mo>
+      <m:mrow>
+       <m:mi>k</m:mi>
+       <m:mo>=</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mi mathvariant="normal">&#x221E;</m:mi>
+     </m:munderover>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mi>k</m:mi>
+     </m:mfrac>
+     <m:mrow>
+      <m:msup>
+       <m:mi>&#x03C8;</m:mi>
+       <m:mo>&#x2032;</m:mo>
+      </m:msup>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>+</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi>&#x03B6;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>3</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+      <m:mrow>
+       <m:msup>
+        <m:mi>&#x03C8;</m:mi>
+        <m:mrow>
+         <m:mi>&#x2032;</m:mi>
+         <m:mi>&#x2032;</m:mi>
+        </m:mrow>
+       </m:msup>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mn>1</m:mn>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>For further sums involving the psi function see
+<a href="http://dlmf.nist.gov/Contents/bib/H#hansen:1975:tsp">
+   Hansen(1975)
+</a>(pp.=C2;360=E2=80=93367). For sums of gamma functions see
+<a href="http://dlmf.nist.gov/Contents/bib/#andrews:1999:sfu">
+   Andrews <em>et.al.</em>(1999)
+</a>(Chapters 2 and 3).
+</p>
+
+<p>For related sums involving finite field analogs of the gamma and
+beta functions (Gauss and Jacobi sums) see
+<a href="http://dlmf.nist.gov/Contents/bib/#andrews:1999:sfu">
+ Andrews <em>et.al.</em>(1999)
+</a>(Chapter 1) and
+<a href="http://dlmf.nist.gov/Contents/bib/T#terras:1999:fao">
+ Terras(1999)
+</a>.
+</p>
+<<page foot>>
+@
+
+\subsection{dlmfsoftware.xhtml}
+<<dlmfsoftware.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Software
+  </div>
+  <hr/>
+<<page foot>>
+@
+
+\subsection{dlmfspecialvaluesandextrema.xhtml}
+<<dlmfspecialvaluesandextrema.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Special Values and Extrema
+  </div>
+  <hr/>
+<h3>Special Values and Extrema</h3>
+<h6>Contents</h6>
+ <ul>
+  <li>Gamma Function</li>
+  <li>Psi Function</li>
+  <li>Extrema</li>
+ </ul>
+
+<h4>Gamma Function</h4>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>1</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mn>1</m:mn>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mi>n</m:mi>
+     <m:mi mathvariant="normal">!</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mo>&#x2223;</m:mo>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2148;</m:mi>
+        <m:mi>y</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>&#x2223;</m:mo>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mfrac>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mrow>
+        <m:mi>y</m:mi>
+        <m:mrow>
+         <m:mi>sinh</m:mi>
+         <m:mrow>
+          <m:mo>(</m:mo>
+          <m:mrow>
+           <m:mi>&#x03C0;</m:mi>
+           <m:mi>y</m:mi>
+          </m:mrow>
+          <m:mo>)</m:mo>
+         </m:mrow>
+        </m:mrow>
+       </m:mrow>
+      </m:mfrac>
+      <m:mo>)</m:mo>
+     </m:mrow>
+     <m:mfrac bevelled="true">
+      <m:mn>1</m:mn>
+      <m:mn>2</m:mn>
+     </m:mfrac>
+    </m:msup>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>2</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:msup>
+     <m:mrow>
+      <m:mo>&#x2223;</m:mo>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mstyle displaystyle="false">
+          <m:mfrac>
+           <m:mn>1</m:mn>
+           <m:mn>2</m:mn>
+          </m:mfrac>
+         </m:mstyle>
+         <m:mo>+</m:mo>
+         <m:mrow>
+          <m:mi mathvariant="normal">&#x2148;</m:mi>
+          <m:mi>y</m:mi>
+         </m:mrow>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>&#x2223;</m:mo>
+     </m:mrow>
+     <m:mn>2</m:mn>
+    </m:msup>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mrow>
+      <m:mi>cosh</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi>y</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>4</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+     <m:mrow>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>3</m:mn>
+          <m:mn>4</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mo>-</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mfrac>
+     <m:mrow>
+      <m:mi>&#x03C0;</m:mi>
+      <m:msqrt>
+       <m:mn>2</m:mn>
+      </m:msqrt>
+     </m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mi>cosh</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+      <m:mo>+</m:mo>
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x2148;</m:mi>
+       <m:mrow>
+        <m:mi>sinh</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mi>&#x03C0;</m:mi>
+          <m:mi>y</m:mi>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mfrac>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:msup>
+     <m:mi>&#x03C0;</m:mi>
+     <m:mfrac bevelled="true">
+      <m:mn>1</m:mn>
+      <m:mn>2</m:mn>
+     </m:mfrac>
+    </m:msup>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>1.77245 38509 05516 02729</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>3</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>2.67893 85347 07747 63365</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>2</m:mn>
+        <m:mn>3</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>1.35411 79394 26400 41694</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>4</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>3.62560 99082 21908 31193</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>3</m:mn>
+        <m:mn>4</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mn>1.22541 67024 65177 64512</m:mn>
+     <m:mi mathvariant="normal">&#x2026;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:msup>
+      <m:mi mathvariant="normal">&#x0393;</m:mi>
+      <m:mo>&#x2032;</m:mo>
+     </m:msup>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>1</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B3;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h4>Psi Function</h4>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mn>1</m:mn>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B3;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<a name="equation13"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mstyle displaystyle="false">
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+      </m:mstyle>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>&#x03B3;</m:mi>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mn>2</m:mn>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mn>1</m:mn>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:munderover>
+       <m:mo movablelimits="false">&#x2211;</m:mo>
+       <m:mrow>
+        <m:mi>k</m:mi>
+        <m:mo>=</m:mo>
+        <m:mn>1</m:mn>
+       </m:mrow>
+       <m:mi>n</m:mi>
+      </m:munderover>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mi>k</m:mi>
+      </m:mfrac>
+     </m:mrow>
+     <m:mo>-</m:mo>
+     <m:mi>&#x03B3;</m:mi>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mrow>
+       <m:mi>n</m:mi>
+       <m:mo>+</m:mo>
+       <m:mstyle displaystyle="false">
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:mstyle>
+      </m:mrow>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>&#x03B3;</m:mi>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mn>2</m:mn>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mn>2</m:mn>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mn>3</m:mn>
+         </m:mfrac>
+        </m:mstyle>
+        <m:mo>+</m:mo>
+        <m:mi mathvariant="normal">&#x2026;</m:mi>
+        <m:mo>+</m:mo>
+        <m:mstyle displaystyle="false">
+         <m:mfrac>
+          <m:mn>1</m:mn>
+          <m:mrow>
+           <m:mrow>
+            <m:mn>2</m:mn>
+            <m:mi>n</m:mi>
+           </m:mrow>
+           <m:mo>-</m:mo>
+           <m:mn>1</m:mn>
+          </m:mrow>
+         </m:mfrac>
+        </m:mstyle>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mo>&#x2265;</m:mo>
+   <m:mn>1</m:mn>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">=E2=84=91</m:mi>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi mathvariant="normal">&#x2148;</m:mi>
+        <m:mi>y</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mn>1</m:mn>
+      <m:mrow>
+       <m:mn>2</m:mn>
+       <m:mi>y</m:mi>
+      </m:mrow>
+     </m:mfrac>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+      <m:mrow>
+       <m:mi>coth</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">=E2=84=91</m:mi>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mstyle displaystyle="false">
+        <m:mfrac>
+         <m:mn>1</m:mn>
+         <m:mn>2</m:mn>
+        </m:mfrac>
+       </m:mstyle>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mfrac>
+      <m:mi>&#x03C0;</m:mi>
+      <m:mn>2</m:mn>
+     </m:mfrac>
+     <m:mrow>
+      <m:mi>tanh</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mi>y</m:mi>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi mathvariant="normal">=E2=84=91</m:mi>
+     <m:mrow>
+      <m:mi>&#x03C8;</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mrow>
+        <m:mn>1</m:mn>
+        <m:mo>+</m:mo>
+        <m:mrow>
+         <m:mi mathvariant="normal">&#x2148;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+       </m:mrow>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mrow>
+        <m:mn>2</m:mn>
+        <m:mi>y</m:mi>
+       </m:mrow>
+      </m:mfrac>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mi>&#x03C0;</m:mi>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+      <m:mrow>
+       <m:mi>coth</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mrow>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mi>y</m:mi>
+        </m:mrow>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<p>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mn>0</m:mn>
+   <m:mo>&lt;</m:mo>
+   <m:mi>p</m:mi>
+   <m:mo>&lt;</m:mo>
+   <m:mi>q</m:mi>
+  </m:mrow>
+ </m:math> are integers, then
+</p>
+
+<a name="equation19"/>
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:mrow>
+     <m:mi>&#x03C8;</m:mi>
+     <m:mrow>
+      <m:mo>(</m:mo>
+      <m:mfrac>
+       <m:mi>p</m:mi>
+       <m:mi>q</m:mi>
+      </m:mfrac>
+      <m:mo>)</m:mo>
+     </m:mrow>
+    </m:mrow>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mi>&#x03B3;</m:mi>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mi>ln</m:mi>
+       <m:mi>q</m:mi>
+      </m:mrow>
+      <m:mo>-</m:mo>
+      <m:mrow>
+       <m:mfrac>
+        <m:mi>&#x03C0;</m:mi>
+        <m:mn>2</m:mn>
+       </m:mfrac>
+       <m:mrow>
+        <m:mi>cot</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mfrac>
+          <m:mrow>
+           <m:mi>&#x03C0;</m:mi>
+           <m:mi>p</m:mi>
+          </m:mrow>
+          <m:mi>q</m:mi>
+         </m:mfrac>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mn>2</m:mn>
+      </m:mfrac>
+      <m:mrow>
+       <m:munderover>
+        <m:mo movablelimits="false">&#x2211;</m:mo>
+        <m:mrow>
+         <m:mi>k</m:mi>
+         <m:mo>=</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+        <m:mrow>
+         <m:mi>q</m:mi>
+         <m:mo>-</m:mo>
+         <m:mn>1</m:mn>
+        </m:mrow>
+       </m:munderover>
+       <m:mrow>
+        <m:mi>cos</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mfrac>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mi>&#x03C0;</m:mi>
+           <m:mi>k</m:mi>
+           <m:mi>p</m:mi>
+          </m:mrow>
+          <m:mi>q</m:mi>
+         </m:mfrac>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+       <m:mrow>
+        <m:mi>ln</m:mi>
+        <m:mrow>
+         <m:mo>(</m:mo>
+         <m:mrow>
+          <m:mn>2</m:mn>
+          <m:mo>-</m:mo>
+          <m:mrow>
+           <m:mn>2</m:mn>
+           <m:mrow>
+            <m:mi>cos</m:mi>
+            <m:mrow>
+             <m:mo>(</m:mo>
+             <m:mfrac>
+              <m:mrow>
+               <m:mn>2</m:mn>
+               <m:mi>&#x03C0;</m:mi>
+               <m:mi>k</m:mi>
+              </m:mrow>
+              <m:mi>q</m:mi>
+             </m:mfrac>
+             <m:mo>)</m:mo>
+            </m:mrow>
+           </m:mrow>
+          </m:mrow>
+         </m:mrow>
+         <m:mo>)</m:mo>
+        </m:mrow>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+
+<h4>Extrema</h4>
+<div>
+ <m:math display="inline">
+  <m:mrow>
+   <m:mrow>
+    <m:msup>
+     <m:mi mathvariant="normal">&#x0393;</m:mi>
+     <m:mo>&#x2032;</m:mo>
+    </m:msup>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:msub>
+      <m:mi>x</m:mi>
+      <m:mi>n</m:mi>
+     </m:msub>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>=</m:mo>
+   <m:mrow>
+    <m:mi>&#x03C8;</m:mi>
+    <m:mrow>
+     <m:mo>(</m:mo>
+     <m:msub>
+      <m:mi>x</m:mi>
+      <m:mi>n</m:mi>
+     </m:msub>
+     <m:mo>)</m:mo>
+    </m:mrow>
+   </m:mrow>
+   <m:mo>=</m:mo>
+   <m:mn>0</m:mn>
+  </m:mrow>
+ </m:math>.
+</div>
+<br/>
+<div class="center">
+ <table align="center">
+  <thead>
+   <tr>
+    <th align="center" class="b l r t">
+     <m:math display="inline">
+      <m:mi>n</m:mi>
+     </m:math>
+    </th>
+    <th align="center" class="b r t">
+     <m:math display="inline">
+      <m:msub>
+       <m:mi>x</m:mi>
+       <m:mi>n</m:mi>
+      </m:msub>
+     </m:math>
+    </th>
+    <th align="center" class="b r t">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mi mathvariant="normal">&#x0393;</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:msub>
+         <m:mi>x</m:mi>
+         <m:mi>n</m:mi>
+        </m:msub>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:math>
+    </th>
+   </tr>
+  </thead>
+  <tbody>
+   <tr>
+    <th align="right" class="l r">0
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mn>1.46163 21449</m:mn>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mn>0.88560 31944</m:mn>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">1
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>0.50408 30083</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>3.54464 36112</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">2
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>1.57349 84732</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mn>2.30240 72583</m:mn>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="B l r">3
+    </th>
+    <td align="right" class="B r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>2.61072 08875</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="B r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>0.88813 63584</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">4
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>3.63529 33665</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mn>0.24512 75398</m:mn>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">5
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>4.65323 77626</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>0.05277 96396</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="B l r">6
+    </th>
+    <td align="right" class="B r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>5.66716 24513</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="B r">
+     <m:math display="inline">
+      <m:mn>0.00932 45945</m:mn>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">7
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>6.67841 82649</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>0.00139 73966</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">8
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>7.68778 83250</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mn>0.00018 18784</m:mn>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="l r">9
+    </th>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>8.69576 41633</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>0.00002 09253</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+   </tr>
+   <tr>
+    <th align="right" class="b l r">10
+    </th>
+    <td align="right" class="b r">
+     <m:math display="inline">
+      <m:mrow>
+       <m:mo>-</m:mo>
+       <m:mn>9.70267 25406</m:mn>
+      </m:mrow>
+     </m:math>
+    </td>
+    <td align="right" class="b r">
+     <m:math display="inline">
+      <m:mn>0.00000 21574</m:mn>
+     </m:math>
+    </td>
+   </tr>
+  </tbody>
+ </table>
+</div>
+
+<p>As
+ <m:math display="inline">
+  <m:mrow>
+   <m:mi>n</m:mi>
+   <m:mi mathvariant="normal">&#x221E;</m:mi>
+  </m:mrow>
+ </m:math>,
+</p>
+
+<div align="center">
+ <m:math display="block">
+  <m:mrow>
+   <m:mrow>
+    <m:msub>
+     <m:mi>x</m:mi>
+     <m:mi>n</m:mi>
+    </m:msub>
+    <m:mo>=</m:mo>
+    <m:mrow>
+     <m:mrow>
+      <m:mo>-</m:mo>
+      <m:mi>n</m:mi>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mfrac>
+       <m:mn>1</m:mn>
+       <m:mi>&#x03C0;</m:mi>
+      </m:mfrac>
+      <m:mrow>
+       <m:mi>arctan</m:mi>
+       <m:mrow>
+        <m:mo>(</m:mo>
+        <m:mfrac>
+         <m:mi>&#x03C0;</m:mi>
+         <m:mrow>
+          <m:mi>ln</m:mi>
+          <m:mi>n</m:mi>
+         </m:mrow>
+        </m:mfrac>
+        <m:mo>)</m:mo>
+       </m:mrow>
+      </m:mrow>
+     </m:mrow>
+     <m:mo>+</m:mo>
+     <m:mrow>
+      <m:mi>O</m:mi>
+      <m:mrow>
+       <m:mo>(</m:mo>
+       <m:mfrac>
+        <m:mn>1</m:mn>
+        <m:mrow>
+         <m:mi>n</m:mi>
+         <m:msup>
+          <m:mrow>
+           <m:mo>(</m:mo>
+           <m:mrow>
+            <m:mi>ln</m:mi>
+            <m:mi>n</m:mi>
+           </m:mrow>
+           <m:mo>)</m:mo>
+          </m:mrow>
+          <m:mn>2</m:mn>
+         </m:msup>
+        </m:mrow>
+       </m:mfrac>
+       <m:mo>)</m:mo>
+      </m:mrow>
+     </m:mrow>
+    </m:mrow>
+   </m:mrow>
+  </m:mrow>
+ </m:math>
+</div>
+<<page foot>>
+@
+
+\subsection{dlmftables.xhtml}
+<<dlmftables.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">
+   <a href="http://dlmf.nist.gov">
+    Digital Library of Mathematical Functions
+   </a><br/>
+   The Gamma Function -- Tables
+  </div>
+  <hr/>
+<h3>Tables</h3>
+
+These tables show Axiom's compliance with published standard values.
+In all cases shown here Axiom conforms to the accuracy of the published
+tables.
+
+<ul>
+ <li>The Gamma Function</li>
+ <li>The Psi Function</li>
+</ul>
+
+<h4>The Gamma Function</h4>
+
+This table was constructed from the published values in the
+Handbook of Mathematical Functions, by Milton Abramowitz
+and Irene A. Stegun, by Dover (1965), pp 267-270.
+
+The first column is the point where the Gamma function is evaluated.
+The second column is the value reported in the Handbook.
+The third column is the actual value computed by Axiom at the given poin=
t.
+The fourth column is the difference of Axiom's value and the Handbook va=
lue.
+
+<table border="1">
+ <tr>
+  <th>point</th>
+  <th>Handbook Value</th>
+  <th>Axiom Computed Value</th>
+  <th>Difference</th>
+ </tr>
+ <tr>
+  <td>1.000</td>
+  <td>1.0000000000</td>
+  <td>1.</td>
+  <td align="right">0.</td>
+ </tr>
+ <tr>
+  <td>1.005</td>
+  <td>0.9971385354</td>
+  <td>0.9971385352483757</td>
+  <td align="right">-1.51E-10</td>
+ </tr>
+ <tr>
+  <td>1.010</td>
+  <td>0.9943258512</td>
+  <td>0.99432585118631189</td>
+  <td align="right">-2.03E-11</td>
+ </tr>
+ <tr>
+  <td>1.015</td>
+  <td>0.9915612888</td>
+  <td>0.99156128884131323</td>
+  <td align="right">4.14E-11</td>
+ </tr>
+ <tr>
+  <td>1.020</td>
+  <td>0.9888442033</td>
+  <td>0.9888442032538789</td>
+  <td align="right">-4.31E-11</td>
+ </tr>
+ <tr>
+  <td>1.025</td>
+  <td>0.9861739633</td>
+  <td>0.98617396313592742</td>
+  <td align="right">-1.54E-10</td>
+ </tr>
+ <tr>
+  <td>1.030</td>
+  <td>0.9835499506</td>
+  <td>0.98354995053928918</td>
+  <td align="right">-7.59E-11</td>
+ </tr>
+ <tr>
+  <td>1.035</td>
+  <td>0.9809715606</td>
+  <td>0.98097156056367696</td>
+  <td align="right">-4.60E-11</td>
+ </tr>
+ <tr>
+  <td>1.040</td>
+  <td>0.9784382009</td>
+  <td>0.9784382009247683</td>
+  <td align="right"> 3.00E-11</td>
+ </tr>
+ <tr>
+  <td>1.045</td>
+  <td>0.9759492919</td>
+  <td>0.97594929183099266</td>
+  <td align="right">-6.55E-11</td>
+ </tr>
+ <tr>
+  <td>1.050</td>
+  <td>0.9735042656</td>
+  <td>0.97350426556841785</td>
+  <td align="right">-2.72E-11</td>
+ </tr>
+ <tr>
+  <td>1.055</td>
+  <td>0.9711025663</td>
+  <td>0.97110256624499502</td>
+  <td align="right">-6.77E-11</td>
+ </tr>
+ <tr>
+  <td>1.060</td>
+  <td>0.9687436495</td>
+  <td>0.96874364951272707</td>
+  <td align="right">-2.36E-12</td>
+ </tr>
+ <tr>
+  <td>1.065</td>
+  <td>0.9664269823</td>
+  <td>0.96642698229777113</td>
+  <td align="right">-1.37E-11</td>
+ </tr>
+ <tr>
+  <td>1.070</td>
+  <td>0.9641520425</td>
+  <td>0.96415204253821729</td>
+  <td align="right"> 4.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.075</td>
+  <td>0.9619183189</td>
+  <td>0.96191831892929192</td>
+  <td align="right"> 2.31E-11</td>
+ </tr>
+ <tr>
+  <td>1.080</td>
+  <td>0.9597253107</td>
+  <td>0.95972531067573963</td>
+  <td align="right">-3.00E-11</td>
+ </tr>
+ <tr>
+  <td>1.085</td>
+  <td>0.9575725273</td>
+  <td>0.95757252725116249</td>
+  <td align="right">-3.68E-11</td>
+ </tr>
+ <tr>
+  <td>1.090</td>
+  <td>0.9554594882</td>
+  <td>0.95545948816407866</td>
+  <td align="right">-4.24E-11</td>
+ </tr>
+ <tr>
+  <td>1.095</td>
+  <td>0.9533857227</td>
+  <td>0.95338572273049704</td>
+  <td align="right"> 2.34E-11</td>
+ </tr>
+ <tr>
+  <td>1.100</td>
+  <td>0.9513507699</td>
+  <td>0.95135076987625944</td>
+  <td align="right">-2.49E-11</td>
+ </tr>
+ <tr>
+  <td>1.105</td>
+  <td>0.9493541778</td>
+  <td>0.94935417782771081</td>
+  <td align="right"> 2.11E-11</td>
+ </tr>
+ <tr>
+  <td>1.110</td>
+  <td>0.9473955040</td>
+  <td>0.94739550404472173</td>
+  <td align="right"> 5.80E-11</td>
+ </tr>
+ <tr>
+  <td>1.115</td>
+  <td>0.9454743149</td>
+  <td>0.94547431492209555</td>
+  <td align="right"> 1.12E-11</td>
+ </tr>
+ <tr>
+  <td>1.120</td>
+  <td>0.9435901856</td>
+  <td>0.94359018561564112</td>
+  <td align="right"> 1.06E-11</td>
+ </tr>
+ <tr>
+  <td>1.125</td>
+  <td>0.9417426997</td>
+  <td>0.94174269984970138</td>
+  <td align="right"> 1.39E-10</td>
+ </tr>
+ <tr>
+  <td>1.130</td>
+  <td>0.9399314497</td>
+  <td>0.93993144972988807</td>
+  <td align="right"> 1.67E-11</td>
+ </tr>
+ <tr>
+  <td>1.135</td>
+  <td>0.9381560356</td>
+  <td>0.93815603556085947</td>
+  <td align="right">-5.14E-11</td>
+ </tr>
+ <tr>
+  <td>1.140</td>
+  <td>0.9364160657</td>
+  <td>0.93641606566898694</td>
+  <td align="right">-2.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.145</td>
+  <td>0.9347111562</td>
+  <td>0.93471115622975964</td>
+  <td align="right"> 2.05E-11</td>
+ </tr>
+ <tr>
+  <td>1.150</td>
+  <td>0.9330409311</td>
+  <td>0.93304093109978414</td>
+  <td align="right"> 6.51E-12</td>
+ </tr>
+ <tr>
+  <td>1.155</td>
+  <td>0.9314050217</td>
+  <td>0.93140502165323868</td>
+  <td align="right">-3.93E-11</td>
+ </tr>
+ <tr>
+  <td>1.160</td>
+  <td>0.9298030666</td>
+  <td>0.92980306664109957</td>
+  <td align="right"> 4.51E-11</td>
+ </tr>
+ <tr>
+  <td>1.165</td>
+  <td>0.9282347120</td>
+  <td>0.92823471196190366</td>
+  <td align="right">-2.59E-11</td>
+ </tr>
+ <tr>
+  <td>1.170</td>
+  <td>0.9266996106</td>
+  <td>0.92669961062266581</td>
+  <td align="right"> 2.10E-11</td>
+ </tr>
+ <tr>
+  <td>1.175</td>
+  <td>0.9251974225</td>
+  <td>0.92519742251686099</td>
+  <td align="right"> 1.24E-11</td>
+ </tr>
+ <tr>
+  <td>1.180</td>
+  <td>0.9237278143</td>
+  <td>0.92372781430006712</td>
+  <td align="right">-1.17E-11</td>
+ </tr>
+ <tr>
+  <td>1.185</td>
+  <td>0.9222904591</td>
+  <td>0.92229045925047382</td>
+  <td align="right"> 1.49E-10</td>
+ </tr>
+ <tr>
+  <td>1.190</td>
+  <td>0.9208850371</td>
+  <td>0.92088503713299241</td>
+  <td align="right"> 2.60E-11</td>
+ </tr>
+ <tr>
+  <td>1.195</td>
+  <td>0.9195112341</td>
+  <td>0.91951123406686597</td>
+  <td align="right">-2.98E-11</td>
+ </tr>
+ <tr>
+  <td>1.200</td>
+  <td>0.9181687424</td>
+  <td>0.91816874239667101</td>
+  <td align="right">-1.67E-11</td>
+ </tr>
+ <tr>
+  <td>1.205</td>
+  <td>0.9168572606</td>
+  <td>0.91685726056661909</td>
+  <td align="right">-3.28E-11</td>
+ </tr>
+ <tr>
+  <td>1.210</td>
+  <td>0.9155764930</td>
+  <td>0.91557649299805532</td>
+  <td align="right"> 8.85E-12</td>
+ </tr>
+ <tr>
+  <td>1.215</td>
+  <td>0.9143261400</td>
+  <td>0.91432614997006778</td>
+  <td align="right"> 9.98E-9</td>
+ </tr>
+ <tr>
+  <td>1.220</td>
+  <td>0.9131059475</td>
+  <td>0.91310594750311536</td>
+  <td align="right"> 1.37E-11</td>
+ </tr>
+ <tr>
+  <td>1.225</td>
+  <td>0.9119156071</td>
+  <td>0.91191560725927312</td>
+  <td align="right"> 1.49E-10</td>
+ </tr>
+ <tr>
+  <td>1.230</td>
+  <td>0.9107548564</td>
+  <td>0.91075485637655895</td>
+  <td align="right">-1.50E-11</td>
+ </tr>
+ <tr>
+  <td>1.235</td>
+  <td>0.9096234274</td>
+  <td>0.90962342744425173</td>
+  <td align="right"> 4.03E-11</td>
+ </tr>
+ <tr>
+  <td>1.240</td>
+  <td>0.9085210583</td>
+  <td>0.90852105834198582</td>
+  <td align="right"> 4.21E-11</td>
+ </tr>
+ <tr>
+  <td>1.245</td>
+  <td>0.9074474922</td>
+  <td>0.90744749215126341</td>
+  <td align="right">-5.77E-11</td>
+ </tr>
+ <tr>
+  <td>1.250</td>
+  <td>0.9064024771</td>
+  <td>0.90640247705547716</td>
+  <td align="right">-3.68E-11</td>
+ </tr>
+ <tr>
+  <td>1.255</td>
+  <td>0.9053857663</td>
+  <td>0.90538576624240463</td>
+  <td align="right">-5.23E-11</td>
+ </tr>
+ <tr>
+  <td>1.260</td>
+  <td>0.9043971178</td>
+  <td>0.90439711780910215</td>
+  <td align="right"> 2.01E-11</td>
+ </tr>
+ <tr>
+  <td>1.265</td>
+  <td>0.9034362946</td>
+  <td>0.90343629466913566</td>
+  <td align="right"> 5.78E-11</td>
+ </tr>
+ <tr>
+  <td>1.270</td>
+  <td>0.9025030645</td>
+  <td>0.90250306446208062</td>
+  <td align="right">-5.13E-11</td>
+ </tr>
+ <tr>
+  <td>1.275</td>
+  <td>0.9015971994</td>
+  <td>0.90159719946523187</td>
+  <td align="right"> 5.66E-11</td>
+ </tr>
+ <tr>
+  <td>1.280</td>
+  <td>0.9007184765</td>
+  <td>0.90071847650745973</td>
+  <td align="right"> 5.78E-13</td>
+ </tr>
+ <tr>
+  <td>1.285</td>
+  <td>0.8998666769</td>
+  <td>0.89986667689491762</td>
+  <td align="right"> 5.55E-12</td>
+ </tr>
+ <tr>
+  <td>1.290</td>
+  <td>0.8990415863</td>
+  <td>0.89904158628967101</td>
+  <td align="right">-3.93E-12</td>
+ </tr>
+ <tr>
+  <td>1.295</td>
+  <td>0.8982429947</td>
+  <td>0.89824299468914737</td>
+  <td align="right">-1.72E-11</td>
+ </tr>
+ <tr>
+  <td>1.300</td>
+  <td>0.8974706963</td>
+  <td>0.89747069630804477</td>
+  <td align="right"> 2.65E-12</td>
+ </tr>
+ <tr>
+  <td>1.305</td>
+  <td>0.8967244895</td>
+  <td>0.89672448951215833</td>
+  <td align="right"> 2.37E-11</td>
+ </tr>
+ <tr>
+  <td>1.310</td>
+  <td>0.8960041767</td>
+  <td>0.89600417674396082</td>
+  <td align="right"> 4.53E-11</td>
+ </tr>
+ <tr>
+  <td>1.315</td>
+  <td>0.8953095644</td>
+  <td>0.89530956444995535</td>
+  <td align="right"> 5.43E-11</td>
+ </tr>
+ <tr>
+  <td>1.320</td>
+  <td>0.8946404630</td>
+  <td>0.89464046300975775</td>
+  <td align="right"> 1.28E-11</td>
+ </tr>
+ <tr>
+  <td>1.325</td>
+  <td>0.8939966866</td>
+  <td>0.89399668666686083</td>
+  <td align="right"> 7.95E-11</td>
+ </tr>
+ <tr>
+  <td>1.330</td>
+  <td>0.8933780535</td>
+  <td>0.89337805346103716</td>
+  <td align="right">-3.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.335</td>
+  <td>0.8927843850</td>
+  <td>0.89278438516233538</td>
+  <td align="right"> 1.51E-10</td>
+ </tr>
+ <tr>
+  <td>1.340</td>
+  <td>0.8922155072</td>
+  <td>0.89221550720663356</td>
+  <td align="right"> 1.43E-11</td>
+ </tr>
+ <tr>
+  <td>1.345</td>
+  <td>0.8916712485</td>
+  <td>0.89167124863270442</td>
+  <td align="right"> 1.24E-10</td>
+ </tr>
+ <tr>
+  <td>1.350</td>
+  <td>0.8911514420</td>
+  <td>0.89115144202666452</td>
+  <td align="right"> 3.78E-11</td>
+ </tr>
+ <tr>
+  <td>1.355</td>
+  <td>0.8906559235</td>
+  <td>0.89065592343803057</td>
+  <td align="right">-5.12E-11</td>
+ </tr>
+ <tr>
+  <td>1.360</td>
+  <td>0.8901845324</td>
+  <td>0.8901845323574008</td>
+  <td align="right">-5.70E-11</td>
+ </tr>
+ <tr>
+  <td>1.365</td>
+  <td>0.8897371116</td>
+  <td>0.88973711163470881</td>
+  <td align="right"> 3.11E-11</td>
+ </tr>
+ <tr>
+  <td>1.370</td>
+  <td>0.8893135074</td>
+  <td>0.88931350742948501</td>
+  <td align="right"> 4.09E-11</td>
+ </tr>
+ <tr>
+  <td>1.375</td>
+  <td>0.8889135692</td>
+  <td>0.88891356915622532</td>
+  <td align="right">-5.89E-11</td>
+ </tr>
+ <tr>
+  <td>1.380</td>
+  <td>0.8885371494</td>
+  <td>0.88853714943101736</td>
+  <td align="right"> 2.03E-11</td>
+ </tr>
+ <tr>
+  <td>1.385</td>
+  <td>0.8881841041</td>
+  <td>0.88818410401940351</td>
+  <td align="right">-9.53E-11</td>
+ </tr>
+ <tr>
+  <td>1.390</td>
+  <td>0.8878542918</td>
+  <td>0.88785429178544073</td>
+  <td align="right">-1.00E-11</td>
+ </tr>
+ <tr>
+  <td>1.395</td>
+  <td>0.8875475748</td>
+  <td>0.88754757464193323</td>
+  <td align="right">-1.49E-10</td>
+ </tr>
+ <tr>
+  <td>1.400</td>
+  <td>0.8872638175</td>
+  <td>0.88726381750180738</td>
+  <td align="right">-7.13E-12</td>
+ </tr>
+ <tr>
+  <td>1.405</td>
+  <td>0.8870028884</td>
+  <td>0.88700288823059736</td>
+  <td align="right">-1.66E-10</td>
+ </tr>
+ <tr>
+  <td>1.410</td>
+  <td>0.8867646576</td>
+  <td>0.88676465760002188</td>
+  <td align="right"> 3.66E-12</td>
+ </tr>
+ <tr>
+  <td>1.415</td>
+  <td>0.8865489993</td>
+  <td>0.88654899924499497</td>
+  <td align="right">-4.45E-11</td>
+ </tr>
+ <tr>
+  <td>1.420</td>
+  <td>0.8863557896</td>
+  <td>0.88635578960951567</td>
+  <td align="right">-1.60E-12</td>
+ </tr>
+ <tr>
+  <td>1.425</td>
+  <td>0.8861849081</td>
+  <td>0.88618490791840432</td>
+  <td align="right">-1.81E-10</td>
+ </tr>
+ <tr>
+  <td>1.430</td>
+  <td>0.8860362361</td>
+  <td>0.88603623612466142</td>
+  <td align="right"> 2.35E-11</td>
+ </tr>
+ <tr>
+  <td>1.435</td>
+  <td>0.8859096587</td>
+  <td>0.88590965887072826</td>
+  <td align="right"> 1.59E-10</td>
+ </tr>
+ <tr>
+  <td>1.440</td>
+  <td>0.8858050635</td>
+  <td>0.88580506344804788</td>
+  <td align="right">-5.45E-11</td>
+ </tr>
+ <tr>
+  <td>1.445</td>
+  <td>0.8857223397</td>
+  <td>0.88572233975753722</td>
+  <td align="right"> 5.12E-11</td>
+ </tr>
+ <tr>
+  <td>1.450</td>
+  <td>0.8856613803</td>
+  <td>0.88566138027095553</td>
+  <td align="right">-3.63E-11</td>
+ </tr>
+ <tr>
+  <td>1.455</td>
+  <td>0.8856220700</td>
+  <td>0.88562207999314335</td>
+  <td align="right"> 9.99E-9</td>
+ </tr>
+ <tr>
+  <td>1.460</td>
+  <td>0.8856043364</td>
+  <td>0.88560433642511449</td>
+  <td align="right"> 3.29E-11</td>
+ </tr>
+ <tr>
+  <td>1.465</td>
+  <td>0.8856080495</td>
+  <td>0.88560804952797856</td>
+  <td align="right"> 4.00E-11</td>
+ </tr>
+ <tr>
+  <td>1.470</td>
+  <td>0.8856331217</td>
+  <td>0.88563312168767672</td>
+  <td align="right">-2.25E-11</td>
+ </tr>
+ <tr>
+  <td>1.475</td>
+  <td>0.8856794575</td>
+  <td>0.88567945767984679</td>
+  <td align="right"> 1.68E-10</td>
+ </tr>
+ <tr>
+  <td>1.480</td>
+  <td>0.8857469646</td>
+  <td>0.88574696463853297</td>
+  <td align="right"> 3.58E-11</td>
+ </tr>
+ <tr>
+  <td>1.485</td>
+  <td>0.8858355520</td>
+  <td>0.88583555202000774</td>
+  <td align="right"> 1.39E-11</td>
+ </tr>
+ <tr>
+  <td>1.490</td>
+  <td>0.8859451316</td>
+  <td>0.885945131572484</td>
+  <td align="right">-2.22E-11</td>
+ </tr>
+ <tr>
+  <td>1.495</td>
+  <td>0.8860756174</td>
+  <td>0.88607561730422169</td>
+  <td align="right">-9.20E-11</td>
+ </tr>
+ <tr>
+  <td>1.500</td>
+  <td>0.8862269255</td>
+  <td>0.88622692545275816</td>
+  <td align="right">-5.14E-11</td>
+ </tr>
+ <tr>
+  <td>1.505</td>
+  <td>0.8863989744</td>
+  <td>0.88639897445482596</td>
+  <td align="right"> 5.62E-11</td>
+ </tr>
+ <tr>
+  <td>1.510</td>
+  <td>0.8865916850</td>
+  <td>0.88659168491694862</td>
+  <td align="right">-8.75E-11</td>
+ </tr>
+ <tr>
+  <td>1.515</td>
+  <td>0.8868049797</td>
+  <td>0.88680497958669369</td>
+  <td align="right">-1.15E-10</td>
+ </tr>
+ <tr>
+  <td>1.520</td>
+  <td>0.8870387833</td>
+  <td>0.88703878332457031</td>
+  <td align="right"> 3.78E-11</td>
+ </tr>
+ <tr>
+  <td>1.525</td>
+  <td>0.8872930231</td>
+  <td>0.88729302307655866</td>
+  <td align="right">-3.89E-11</td>
+ </tr>
+ <tr>
+  <td>1.530</td>
+  <td>0.8875676278</td>
+  <td>0.88756762784725507</td>
+  <td align="right"> 5.05E-11</td>
+ </tr>
+ <tr>
+  <td>1.535</td>
+  <td>0.8878625287</td>
+  <td>0.88786252867361892</td>
+  <td align="right">-2.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.540</td>
+  <td>0.8881776586</td>
+  <td>0.88817765859552456</td>
+  <td align="right">-1.03E-11</td>
+ </tr>
+ <tr>
+  <td>1.545</td>
+  <td>0.8885129527</td>
+  <td>0.88851295264558472</td>
+  <td align="right">-4.41E-11</td>
+ </tr>
+ <tr>
+  <td>1.550</td>
+  <td>0.8888683478</td>
+  <td>0.88886834780261559</td>
+  <td align="right"> 2.74E-12</td>
+ </tr>
+ <tr>
+  <td>1.555</td>
+  <td>0.8892437830</td>
+  <td>0.88924378298210571</td>
+  <td align="right">-1.06E-11</td>
+ </tr>
+ <tr>
+  <td>1.560</td>
+  <td>0.8896391990</td>
+  <td>0.88963919900923583</td>
+  <td align="right">-3.65E-12</td>
+ </tr>
+ <tr>
+  <td>1.565</td>
+  <td>0.8900545387</td>
+  <td>0.89005453859597561</td>
+  <td align="right">-1.04E-10</td>
+ </tr>
+ <tr>
+  <td>1.570</td>
+  <td>0.8904897463</td>
+  <td>0.89048974631869759</td>
+  <td align="right"> 2.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.575</td>
+  <td>0.8909447686</td>
+  <td>0.89094476859629979</td>
+  <td align="right"> 8.93E-12</td>
+ </tr>
+ <tr>
+  <td>1.580</td>
+  <td>0.8914195537</td>
+  <td>0.89141955366882042</td>
+  <td align="right">-2.38E-11</td>
+ </tr>
+ <tr>
+  <td>1.585</td>
+  <td>0.8919140515</td>
+  <td>0.8919140515765388</td>
+  <td align="right"> 8.47E-11</td>
+ </tr>
+ <tr>
+  <td>1.590</td>
+  <td>0.8924282141</td>
+  <td>0.8924282141395512</td>
+  <td align="right"> 3.07E-11</td>
+ </tr>
+ <tr>
+  <td>1.595</td>
+  <td>0.8929619949</td>
+  <td>0.89296199493781103</td>
+  <td align="right"> 4.74E-11</td>
+ </tr>
+ <tr>
+  <td>1.600</td>
+  <td>0.8935153493</td>
+  <td>0.89351534928506793</td>
+  <td align="right">-2.24E-11</td>
+ </tr>
+ <tr>
+  <td>1.605</td>
+  <td>0.8940882342</td>
+  <td>0.89408823423580575</td>
+  <td align="right"> 3.63E-11</td>
+ </tr>
+ <tr>
+  <td>1.610</td>
+  <td>0.8946806085</td>
+  <td>0.89468060852796683</td>
+  <td align="right"> 2.74E-11</td>
+ </tr>
+ <tr>
+  <td>1.615</td>
+  <td>0.8952924327</td>
+  <td>0.89529243259029823</td>
+  <td align="right">-9.74E-11</td>
+ </tr>
+ <tr>
+  <td>1.620</td>
+  <td>0.8959236685</td>
+  <td>0.89592366851824745</td>
+  <td align="right"> 2.86E-11</td>
+ </tr>
+ <tr>
+  <td>1.625</td>
+  <td>0.8965742800</td>
+  <td>0.89657428005659789</td>
+  <td align="right"> 6.46E-11</td>
+ </tr>
+ <tr>
+  <td>1.630</td>
+  <td>0.8972442326</td>
+  <td>0.89724423258250552</td>
+  <td align="right">-7.80E-12</td>
+ </tr>
+ <tr>
+  <td>1.635</td>
+  <td>0.8979334930</td>
+  <td>0.89793349308892934</td>
+  <td align="right"> 9.89E-11</td>
+ </tr>
+ <tr>
+  <td>1.640</td>
+  <td>0.8986420302</td>
+  <td>0.89864203016845012</td>
+  <td align="right">-2.68E-11</td>
+ </tr>
+ <tr>
+  <td>1.645</td>
+  <td>0.8993698138</td>
+  <td>0.89936981399746452</td>
+  <td align="right"> 2.04E-10</td>
+ </tr>
+ <tr>
+  <td>1.650</td>
+  <td>0.9001168163</td>
+  <td>0.9001168163207548</td>
+  <td align="right"> 1.21E-11</td>
+ </tr>
+ <tr>
+  <td>1.655</td>
+  <td>0.9008830104</td>
+  <td>0.90088301043641827</td>
+  <td align="right"> 2.24E-11</td>
+ </tr>
+ <tr>
+  <td>1.660</td>
+  <td>0.9016683712</td>
+  <td>0.90166837118115595</td>
+  <td align="right">-1.49E-11</td>
+ </tr>
+ <tr>
+  <td>1.665</td>
+  <td>0.9024728748</td>
+  <td>0.90247287490643413</td>
+  <td align="right"> 1.16E-10</td>
+ </tr>
+ <tr>
+  <td>1.670</td>
+  <td>0.9032964995</td>
+  <td>0.9032964995021503</td>
+  <td align="right">-1.09E-11</td>
+ </tr>
+ <tr>
+  <td>1.675</td>
+  <td>0.9041392243</td>
+  <td>0.90413922432675797</td>
+  <td align="right"> 3.24E-11</td>
+ </tr>
+ <tr>
+  <td>1.680</td>
+  <td>0.9050010302</td>
+  <td>0.90500103023115419</td>
+  <td align="right"> 4.40E-11</td>
+ </tr>
+ <tr>
+  <td>1.685</td>
+  <td>0.9058818996</td>
+  <td>0.90588189953639731</td>
+  <td align="right">-7.63E-11</td>
+ </tr>
+ <tr>
+  <td>1.690</td>
+  <td>0.9067818160</td>
+  <td>0.90678181602099839</td>
+  <td align="right"> 9.93E-12</td>
+ </tr>
+ <tr>
+  <td>1.695</td>
+  <td>0.9077007650</td>
+  <td>0.90770076490852225</td>
+  <td align="right">-9.63E-11</td>
+ </tr>
+ <tr>
+  <td>1.700</td>
+  <td>0.9086387329</td>
+  <td>0.90863873285549646</td>
+  <td align="right">-5.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.705</td>
+  <td>0.9095957079</td>
+  <td>0.90959570793962097</td>
+  <td align="right"> 4.25E-11</td>
+ </tr>
+ <tr>
+  <td>1.710</td>
+  <td>0.9105716796</td>
+  <td>0.9105716796482709</td>
+  <td align="right"> 5.89E-11</td>
+ </tr>
+ <tr>
+  <td>1.715</td>
+  <td>0.9115666390</td>
+  <td>0.91156663886729161</td>
+  <td align="right">-1.31E-10</td>
+ </tr>
+ <tr>
+  <td>1.720</td>
+  <td>0.9125805779</td>
+  <td>0.91258057787007674</td>
+  <td align="right">-1.93E-11</td>
+ </tr>
+ <tr>
+  <td>1.725</td>
+  <td>0.9136134904</td>
+  <td>0.91361349029479011</td>
+  <td align="right">-1.16E-10</td>
+ </tr>
+ <tr>
+  <td>1.730</td>
+  <td>0.9146653712</td>
+  <td>0.91466537118231861</td>
+  <td align="right">-2.63E-11</td>
+ </tr>
+ <tr>
+  <td>1.735</td>
+  <td>0.9157362171</td>
+  <td>0.9157362168940244</td>
+  <td align="right">-2.15E-10</td>
+ </tr>
+ <tr>
+  <td>1.740</td>
+  <td>0.9168260252</td>
+  <td>0.91682602514979106</td>
+  <td align="right">-5.47E-11</td>
+ </tr>
+ <tr>
+  <td>1.745</td>
+  <td>0.9179347950</td>
+  <td>0.91793479500653363</td>
+  <td align="right"> 8.97E-12</td>
+ </tr>
+ <tr>
+  <td>1.750</td>
+  <td>0.9190625268</td>
+  <td>0.91906252684888312</td>
+  <td align="right"> 3.95E-11</td>
+ </tr>
+ <tr>
+  <td>1.755</td>
+  <td>0.9202092224</td>
+  <td>0.92020922238011904</td>
+  <td align="right">-3.48E-11</td>
+ </tr>
+ <tr>
+  <td>1.760</td>
+  <td>0.9213748846</td>
+  <td>0.92137488461334993</td>
+  <td align="right"> 4.68E-12</td>
+ </tr>
+ <tr>
+  <td>1.765</td>
+  <td>0.9225595178</td>
+  <td>0.92255951786293755</td>
+  <td align="right"> 4.88E-11</td>
+ </tr>
+ <tr>
+  <td>1.770</td>
+  <td>0.9237631277</td>
+  <td>0.9237631277361581</td>
+  <td align="right"> 2.96E-11</td>
+ </tr>
+ <tr>
+  <td>1.775</td>
+  <td>0.9249857211</td>
+  <td>0.92498572112510025</td>
+  <td align="right"> 2.89E-11</td>
+ </tr>
+ <tr>
+  <td>1.780</td>
+  <td>0.9262273062</td>
+  <td>0.92622730619879157</td>
+  <td align="right"> 8.37E-12</td>
+ </tr>
+ <tr>
+  <td>1.785</td>
+  <td>0.9274878926</td>
+  <td>0.92748789239555507</td>
+  <td align="right">-1.97E-10</td>
+ </tr>
+ <tr>
+  <td>1.790</td>
+  <td>0.9287674904</td>
+  <td>0.92876749040057904</td>
+  <td align="right">-3.84E-12</td>
+ </tr>
+ <tr>
+  <td>1.795</td>
+  <td>0.9300661123</td>
+  <td>0.93006611219852275</td>
+  <td align="right">-1.13E-10</td>
+ </tr>
+ <tr>
+  <td>1.800</td>
+  <td>0.9313837710</td>
+  <td>0.93138377097715253</td>
+  <td align="right">-2.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.805</td>
+  <td>0.9327204811</td>
+  <td>0.93272048117993289</td>
+  <td align="right"> 8.20E-11</td>
+ </tr>
+ <tr>
+  <td>1.810</td>
+  <td>0.9340762585</td>
+  <td>0.93407625848467779</td>
+  <td align="right">-2.05E-11</td>
+ </tr>
+ <tr>
+  <td>1.815</td>
+  <td>0.9354511198</td>
+  <td>0.93545111979719375</td>
+  <td align="right"> 8.27E-12</td>
+ </tr>
+ <tr>
+  <td>1.820</td>
+  <td>0.9368450832</td>
+  <td>0.93684508324512517</td>
+  <td align="right"> 4.80E-11</td>
+ </tr>
+ <tr>
+  <td>1.825</td>
+  <td>0.9382581682</td>
+  <td>0.93825816817200214</td>
+  <td align="right">-2.82E-11</td>
+ </tr>
+ <tr>
+  <td>1.830</td>
+  <td>0.9396903951</td>
+  <td>0.93969039513148056</td>
+  <td align="right"> 1.86E-11</td>
+ </tr>
+ <tr>
+  <td>1.835</td>
+  <td>0.9411417859</td>
+  <td>0.94114178588178177</td>
+  <td align="right">-2.64E-11</td>
+ </tr>
+ <tr>
+  <td>1.840</td>
+  <td>0.9426123634</td>
+  <td>0.94261236338031951</td>
+  <td align="right">-2.35E-11</td>
+ </tr>
+ <tr>
+  <td>1.845</td>
+  <td>0.9441021519</td>
+  <td>0.94410215177851575</td>
+  <td align="right">-1.22E-10</td>
+ </tr>
+ <tr>
+  <td>1.850</td>
+  <td>0.9456111764</td>
+  <td>0.94561117639912362</td>
+  <td align="right">-2.02E-12</td>
+ </tr>
+ <tr>
+  <td>1.855</td>
+  <td>0.9471394637</td>
+  <td>0.94713946380190617</td>
+  <td align="right"> 9.43E-11</td>
+ </tr>
+ <tr>
+  <td>1.860</td>
+  <td>0.9486870417</td>
+  <td>0.94868704167359708</td>
+  <td align="right">-2.86E-11</td>
+ </tr>
+ <tr>
+  <td>1.865</td>
+  <td>0.9502539389</td>
+  <td>0.95025393889348797</td>
+  <td align="right">-1.33E-11</td>
+ </tr>
+ <tr>
+  <td>1.870</td>
+  <td>0.9518401855</td>
+  <td>0.95184018551169203</td>
+  <td align="right"> 9.61E-12</td>
+ </tr>
+ <tr>
+  <td>1.875</td>
+  <td>0.9534458127</td>
+  <td>0.95344581274503493</td>
+  <td align="right"> 5.77E-11</td>
+ </tr>
+ <tr>
+  <td>1.880</td>
+  <td>0.9550708530</td>
+  <td>0.95507085297311556</td>
+  <td align="right">-2.73E-11</td>
+ </tr>
+ <tr>
+  <td>1.885</td>
+  <td>0.9567153398</td>
+  <td>0.95671533973453671</td>
+  <td align="right">-6.02E-11</td>
+ </tr>
+ <tr>
+  <td>1.890</td>
+  <td>0.9583793077</td>
+  <td>0.95837930772329927</td>
+  <td align="right"> 1.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.895</td>
+  <td>0.9600627927</td>
+  <td>0.960062792785362</td>
+  <td align="right"> 8.60E-11</td>
+ </tr>
+ <tr>
+  <td>1.900</td>
+  <td>0.9617658319</td>
+  <td>0.96176583191536336</td>
+  <td align="right"> 2.60E-11</td>
+ </tr>
+ <tr>
+  <td>1.905</td>
+  <td>0.9634884632</td>
+  <td>0.96348846325350124</td>
+  <td align="right"> 5.75E-11</td>
+ </tr>
+ <tr>
+  <td>1.910</td>
+  <td>0.9652307261</td>
+  <td>0.96523072608257054</td>
+  <td align="right">-3.05E-11</td>
+ </tr>
+ <tr>
+  <td>1.915</td>
+  <td>0.9669926608</td>
+  <td>0.96699266080453206</td>
+  <td align="right"> 5.78E-13</td>
+ </tr>
+ <tr>
+  <td>1.920</td>
+  <td>0.9687743090</td>
+  <td>0.96877430902013406</td>
+  <td align="right"> 1.66E-11</td>
+ </tr>
+ <tr>
+  <td>1.925</td>
+  <td>0.9705757134</td>
+  <td>0.97057571340334281</td>
+  <td align="right">-3.67E-12</td>
+ </tr>
+ <tr>
+  <td>1.930</td>
+  <td>0.9723969178</td>
+  <td>0.9723969177808085</td>
+  <td align="right">-5.87E-12</td>
+ </tr>
+ <tr>
+  <td>1.935</td>
+  <td>0.9742379672</td>
+  <td>0.97423796710926569</td>
+  <td align="right">-8.59E-11</td>
+ </tr>
+ <tr>
+  <td>1.940</td>
+  <td>0.9760989075</td>
+  <td>0.97609890747347727</td>
+  <td align="right">-2.67E-11</td>
+ </tr>
+ <tr>
+  <td>1.945</td>
+  <td>0.9779797861</td>
+  <td>0.97797978608432246</td>
+  <td align="right">-2.76E-11</td>
+ </tr>
+ <tr>
+  <td>1.950</td>
+  <td>0.9798806513</td>
+  <td>0.9798806512770295</td>
+  <td align="right">-3.65E-11</td>
+ </tr>
+ <tr>
+  <td>1.955</td>
+  <td>0.9818015524</td>
+  <td>0.98180155250954815</td>
+  <td align="right"> 1.02E-10</td>
+ </tr>
+ <tr>
+  <td>1.960</td>
+  <td>0.9837425404</td>
+  <td>0.98374254036106346</td>
+  <td align="right">-5.01E-11</td>
+ </tr>
+ <tr>
+  <td>1.965</td>
+  <td>0.9857036664</td>
+  <td>0.985703666530647</td>
+  <td align="right"> 1.27E-10</td>
+ </tr>
+ <tr>
+  <td>1.970</td>
+  <td>0.9876849838</td>
+  <td>0.98768498383604675</td>
+  <td align="right"> 4.68E-11</td>
+ </tr>
+ <tr>
+  <td>1.975</td>
+  <td>0.9896865462</td>
+  <td>0.98968654618919183</td>
+  <td align="right">-1.77E-11</td>
+ </tr>
+ <tr>
+  <td>1.980</td>
+  <td>0.9917084087</td>
+  <td>0.99170840868869103</td>
+  <td align="right">-3.22E-12</td>
+ </tr>
+ <tr>
+  <td>1.985</td>
+  <td>0.9937506274</td>
+  <td>0.9937506274792185</td>
+  <td align="right"> 6.46E-11</td>
+ </tr>
+ <tr>
+  <td>1.990</td>
+  <td>0.9958132598</td>
+  <td>0.99581325984380575</td>
+  <td align="right"> 4.71E-11</td>
+ </tr>
+ <tr>
+  <td>1.995</td>
+  <td>0.9978963643</td>
+  <td>0.99789636418011041</td>
+  <td align="right">-1.27E-10</td>
+ </tr>
+</table>
+
+
+<h4>The Psi Function</h4>
+
+This table was constructed from the published values in the
+Handbook of Mathematical Functions, by Milton Abramowitz
+and Irene A. Stegun, by Dover (1965), pp 267-270.
+
+Axiom implements the polygamma function which allows for multiple
+derivatives. The Psi function is a special case of the polygamma
+function for zero derivatives. For the purpose of this table it
+is defined as:
+<pre>
+   Psi(x) == polygamma(0,x)
+</pre>
+
+The first column is the point where the Gamma function is evaluated.
+The second column is the value reported in the Handbook.
+The third column is the actual value computed by Axiom at the given poin=
t.
+The fourth column is the difference of Axiom's value and the Handbook va=
lue.
+
+<table border="1">
+ <tr>
+  <th>point</th>
+  <th>Handbook Value</th>
+  <th>Axiom Computed Value</th>
+  <th>Difference</th>
+ </tr>
+ <tr>
+  <td>1.000</td>
+  <td>-0.5772156649</td>
+  <td>-0.57721566490153275</td>
+  <td align="right">-1.53E-12</td>
+ </tr>
+ <tr>
+  <td>1.005</td>
+  <td>-0.5690209113</td>
+  <td>-0.56902091134438304</td>
+  <td align="right"> -4.43E-11</td>
+ </tr>
+ <tr>
+  <td>1.010</td>
+  <td>-0.5608854579</td>
+  <td>-0.56088545786867472</td>
+  <td align="right"> 3.13E-11</td>
+ </tr>
+ <tr>
+  <td>1.015</td>
+  <td>-0.5528085156</td>
+  <td>-0.55280851559434629</td>
+  <td align="right"> 5.65E-12</td>
+ </tr>
+ <tr>
+  <td>1.020</td>
+  <td>-0.5447893105</td>
+  <td>-0.54478931045617984</td>
+  <td align="right"> 4.38E-11</td>
+ </tr>
+ <tr>
+  <td>1.025</td>
+  <td>-0.5368270828</td>
+  <td>-0.53682708284938863</td>
+  <td align="right"> -4.93E-11</td>
+ </tr>
+ <tr>
+  <td>1.030</td>
+  <td>-0.5289210873</td>
+  <td>-0.5289210872854303</td>
+  <td align="right"> 1.45E-11</td>
+ </tr>
+ <tr>
+  <td>1.035</td>
+  <td>-0.5210705921</td>
+  <td>-0.52107059205771</td>
+  <td align="right"> 4.22E-11</td>
+ </tr>
+ <tr>
+  <td>1.040</td>
+  <td>-0.5132748789</td>
+  <td>-0.51327487891683021</td>
+  <td align="right"> -1.68E-11</td>
+ </tr>
+ <tr>
+  <td>1.045</td>
+  <td>-0.5055332428</td>
+  <td>-0.50553324275508449</td>
+  <td align="right"> 4.49E-11</td>
+ </tr>
+ <tr>
+  <td>1.050</td>
+  <td>-0.4978449913</td>
+  <td>-0.49784499129987031</td>
+  <td align="right"> 1.29E-13</td>
+ </tr>
+ <tr>
+  <td>1.055</td>
+  <td>-0.4902094448</td>
+  <td>-0.49020944481574569</td>
+  <td align="right"> -1.57E-11</td>
+ </tr>
+ <tr>
+  <td>1.060</td>
+  <td>-0.4826259358</td>
+  <td>-0.48262593581482538</td>
+  <td align="right"> -1.48E-11</td>
+ </tr>
+ <tr>
+  <td>1.065</td>
+  <td>-0.4750938088</td>
+  <td>-0.47509380877526647</td>
+  <td align="right"> 2.47E-11</td>
+ </tr>
+ <tr>
+  <td>1.070</td>
+  <td>-0.4676124199</td>
+  <td>-0.46761241986755342</td>
+  <td align="right"> 3.24E-11</td>
+ </tr>
+ <tr>
+  <td>1.075</td>
+  <td>-0.4601811367</td>
+  <td>-0.4601811366883593</td>
+  <td align="right"> 1.16E-11</td>
+ </tr>
+ <tr>
+  <td>1.080</td>
+  <td>-0.4527993380</td>
+  <td>-0.45279933800171246</td>
+  <td align="right"> -1.71E-12</td>
+ </tr>
+ <tr>
+  <td>1.085</td>
+  <td>-0.4454664135</td>
+  <td>-0.44546641348725191</td>
+  <td align="right"> 1.27E-11</td>
+ </tr>
+ <tr>
+  <td>1.090</td>
+  <td>-0.4381817635</td>
+  <td>-0.43818176349533489</td>
+  <td align="right"> 4.66E-12</td>
+ </tr>
+ <tr>
+  <td>1.095</td>
+  <td>-0.4309447988</td>
+  <td>-0.43094479880878706</td>
+  <td align="right"> -8.78E-12</td>
+ </tr>
+ <tr>
+  <td>1.100</td>
+  <td>-0.4237549404</td>
+  <td>-0.42375494041107653</td>
+  <td align="right"> -1.10E-11</td>
+ </tr>
+ <tr>
+  <td>1.105</td>
+  <td>-0.4166116193</td>
+  <td>-0.41661161926071655</td>
+  <td align="right"> 3.92E-11</td>
+ </tr>
+ <tr>
+  <td>1.110</td>
+  <td>-0.4095142761</td>
+  <td>-0.40951427607169383</td>
+  <td align="right"> 2.83E-11</td>
+ </tr>
+ <tr>
+  <td>1.115</td>
+  <td>-0.4024623611</td>
+  <td>-0.40246236109974648</td>
+  <td align="right"> 2.53E-13</td>
+ </tr>
+ <tr>
+  <td>1.120</td>
+  <td>-0.3954553339</td>
+  <td>-0.39545533393429283</td>
+  <td align="right"> -3.42E-11</td>
+ </tr>
+ <tr>
+  <td>1.125</td>
+  <td>-0.3884926633</td>
+  <td>-0.38849266329585463</td>
+  <td align="right"> 4.14E-12</td>
+ </tr>
+ <tr>
+  <td>1.130</td>
+  <td>-0.3815738268</td>
+  <td>-0.38157382683879215</td>
+  <td align="right"> -3.87E-11</td>
+ </tr>
+ <tr>
+  <td>1.135</td>
+  <td>-0.3746983110</td>
+  <td>-0.37469831095919082</td>
+  <td align="right"> 4.08E-11</td>
+ </tr>
+ <tr>
+  <td>1.140</td>
+  <td>-0.3678656106</td>
+  <td>-0.36786561060774969</td>
+  <td align="right"> -7.74E-12</td>
+ </tr>
+ <tr>
+  <td>1.145</td>
+  <td>-0.3610752291</td>
+  <td>-0.361075229107509</td>
+  <td align="right"> -7.50E-12</td>
+ </tr>
+ <tr>
+  <td>1.150</td>
+  <td>-0.3543266780</td>
+  <td>-0.35432667797627904</td>
+  <td align="right"> 2.37E-11</td>
+ </tr>
+ <tr>
+  <td>1.155</td>
+  <td>-0.3476194768</td>
+  <td>-0.34761947675362337</td>
+  <td align="right"> 4.63E-11</td>
+ </tr>
+ <tr>
+  <td>1.160</td>
+  <td>-0.3409531528</td>
+  <td>-0.34095315283226135</td>
+  <td align="right"> -3.22E-11</td>
+ </tr>
+ <tr>
+  <td>1.165</td>
+  <td>-0.3343272413</td>
+  <td>-0.3343272412937619</td>
+  <td align="right"> 6.23E-12</td>
+ </tr>
+ <tr>
+  <td>1.170</td>
+  <td>-0.3277412847</td>
+  <td>-0.3277412847483927</td>
+  <td align="right"> -4.83E-11</td>
+ </tr>
+ <tr>
+  <td>1.175</td>
+  <td>-0.3211948332</td>
+  <td>-0.3211948331790081</td>
+  <td align="right"> 2.09E-11</td>
+ </tr>
+ <tr>
+  <td>1.180</td>
+  <td>-0.3146874438</td>
+  <td>-0.31468744378886082</td>
+  <td align="right"> 1.11E-11</td>
+ </tr>
+ <tr>
+  <td>1.185</td>
+  <td>-0.3082186809</td>
+  <td>-0.30821868085320625</td>
+  <td align="right"> 4.67E-11</td>
+ </tr>
+ <tr>
+  <td>1.190</td>
+  <td>-0.3017881156</td>
+  <td>-0.30178811557461016</td>
+  <td align="right"> 2.53E-11</td>
+ </tr>
+ <tr>
+  <td>1.195</td>
+  <td>-0.2953953259</td>
+  <td>-0.2953953259418296</td>
+  <td align="right"> -4.18E-11</td>
+ </tr>
+ <tr>
+  <td>1.200</td>
+  <td>-0.2890398966</td>
+  <td>-0.28903989659218843</td>
+  <td align="right"> 7.81E-12</td>
+ </tr>
+ <tr>
+  <td>1.205</td>
+  <td>-0.2827214187</td>
+  <td>-0.28272141867731704</td>
+  <td align="right"> 2.26E-11</td>
+ </tr>
+ <tr>
+  <td>1.210</td>
+  <td>-0.2764394897</td>
+  <td>-0.2764394897321919</td>
+  <td align="right"> -3.21E-11</td>
+ </tr>
+ <tr>
+  <td>1.215</td>
+  <td>-0.2701937135</td>
+  <td>-0.27019371354735244</td>
+  <td align="right"> -4.73E-11</td>
+ </tr>
+ <tr>
+  <td>1.220</td>
+  <td>-0.2639837000</td>
+  <td>-0.26398370004422023</td>
+  <td align="right"> -4.42E-11</td>
+ </tr>
+ <tr>
+  <td>1.225</td>
+  <td>-0.2578090652</td>
+  <td>-0.25780906515343338</td>
+  <td align="right"> 4.65E-11</td>
+ </tr>
+ <tr>
+  <td>1.230</td>
+  <td>-0.2516694307</td>
+  <td>-0.25166943069609982</td>
+  <td align="right"> 3.90E-12</td>
+ </tr>
+ <tr>
+  <td>1.235</td>
+  <td>-0.2455644243</td>
+  <td>-0.24556442426789726</td>
+  <td align="right"> 3.21E-11</td>
+ </tr>
+ <tr>
+  <td>1.240</td>
+  <td>-0.2394936791</td>
+  <td>-0.23949367912593666</td>
+  <td align="right"> -2.59E-11</td>
+ </tr>
+ <tr>
+  <td>1.245</td>
+  <td>-0.2334568341</td>
+  <td>-0.23345683407831253</td>
+  <td align="right"> 2.16E-11</td>
+ </tr>
+ <tr>
+  <td>1.250</td>
+  <td>-0.2274535334</td>
+  <td>-0.22745353337626528</td>
+  <td align="right"> 2.37E-11</td>
+ </tr>
+ <tr>
+  <td>1.255</td>
+  <td>-0.2214834266</td>
+  <td>-0.22148342660888165</td>
+  <td align="right"> -8.88E-12</td>
+ </tr>
+ <tr>
+  <td>1.260</td>
+  <td>-0.2155461686</td>
+  <td>-0.21554616860026521</td>
+  <td align="right"> -2.65E-13</td>
+ </tr>
+ <tr>
+  <td>1.265</td>
+  <td>-0.2096414193</td>
+  <td>-0.20964141930911384</td>
+  <td align="right"> -9.11E-12</td>
+ </tr>
+ <tr>
+  <td>1.270</td>
+  <td>-0.2037688437</td>
+  <td>-0.20376884373062343</td>
+  <td align="right"> -3.06E-11</td>
+ </tr>
+ <tr>
+  <td>1.275</td>
+  <td>-0.1979281118</td>
+  <td>-0.19792811180067393</td>
+  <td align="right"> -6.73E-13</td>
+ </tr>
+ <tr>
+  <td>1.280</td>
+  <td>-0.1921188983</td>
+  <td>-0.19211889830222173</td>
+  <td align="right"> -2.22E-12</td>
+ </tr>
+ <tr>
+  <td>1.285</td>
+  <td>-0.1863408828</td>
+  <td>-0.18634088277384209</td>
+  <td align="right"> 2.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.290</td>
+  <td>-0.1805937494</td>
+  <td>-0.1805937494203691</td>
+  <td align="right"> -2.03E-11</td>
+ </tr>
+ <tr>
+  <td>1.295</td>
+  <td>-0.1748771870</td>
+  <td>-0.17487718702556942</td>
+  <td align="right"> -2.55E-11</td>
+ </tr>
+ <tr>
+  <td>1.300</td>
+  <td>-0.1691908889</td>
+  <td>-0.16919088886679934</td>
+  <td align="right"> 3.32E-11</td>
+ </tr>
+ <tr>
+  <td>1.305</td>
+  <td>-0.1635345526</td>
+  <td>-0.163534552631597</td>
+  <td align="right"> -3.15E-11</td>
+ </tr>
+ <tr>
+  <td>1.310</td>
+  <td>-0.1579078803</td>
+  <td>-0.15790788033614178</td>
+  <td align="right"> -3.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.315</td>
+  <td>-0.1523105782</td>
+  <td>-0.15231057824555994</td>
+  <td align="right"> -4.55E-11</td>
+ </tr>
+ <tr>
+  <td>1.320</td>
+  <td>-0.1467423568</td>
+  <td>-0.1467423567959959</td>
+  <td align="right"> 4.00E-12</td>
+ </tr>
+ <tr>
+  <td>1.325</td>
+  <td>-0.1412029305</td>
+  <td>-0.14120293051842803</td>
+  <td align="right"> -1.84E-11</td>
+ </tr>
+ <tr>
+  <td>1.330</td>
+  <td>-0.1356920180</td>
+  <td>-0.13569201796416941</td>
+  <td align="right"> 3.58E-11</td>
+ </tr>
+ <tr>
+  <td>1.335</td>
+  <td>-0.1302093416</td>
+  <td>-0.13020934163201769</td>
+  <td align="right"> -3.20E-11</td>
+ </tr>
+ <tr>
+  <td>1.340</td>
+  <td>-0.1247546279</td>
+  <td>-0.12475462789700376</td>
+  <td align="right"> 2.99E-12</td>
+ </tr>
+ <tr>
+  <td>1.345</td>
+  <td>-0.1193276069</td>
+  <td>-0.11932760694070754</td>
+  <td align="right"> -4.07E-11</td>
+ </tr>
+ <tr>
+  <td>1.350</td>
+  <td>-0.1139280127</td>
+  <td>-0.11392801268308839</td>
+  <td align="right"> 1.69E-11</td>
+ </tr>
+ <tr>
+  <td>1.355</td>
+  <td>-0.1085555827</td>
+  <td>-0.10855558271580501</td>
+  <td align="right"> -1.58E-11</td>
+ </tr>
+ <tr>
+  <td>1.360</td>
+  <td>-0.1032100582</td>
+  <td>-0.10321005823697738</td>
+  <td align="right"> -3.69E-11</td>
+ </tr>
+ <tr>
+  <td>1.365</td>
+  <td>-0.0978911840</td>
+  <td>-0.097891183987354968</td>
+  <td align="right"> 1.26E-11</td>
+ </tr>
+ <tr>
+  <td>1.370</td>
+  <td>-0.0925987082</td>
+  <td>-0.092598708187860979</td>
+  <td align="right"> 1.21E-11</td>
+ </tr>
+ <tr>
+  <td>1.375</td>
+  <td>-0.0873323825</td>
+  <td>-0.087332382478473081</td>
+  <td align="right"> 2.15E-11</td>
+ </tr>
+ <tr>
+  <td>1.380</td>
+  <td>-0.0820919619</td>
+  <td>-0.082091961858406615</td>
+  <td align="right"> 4.15E-11</td>
+ </tr>
+ <tr>
+  <td>1.385</td>
+  <td>-0.0768772046</td>
+  <td>-0.076877204627574525</td>
+  <td align="right"> -2.75E-11</td>
+ </tr>
+ <tr>
+  <td>1.390</td>
+  <td>-0.0716878723</td>
+  <td>-0.071687872329281643</td>
+  <td align="right"> -2.92E-11</td>
+ </tr>
+ <tr>
+  <td>1.395</td>
+  <td>-0.0665237297</td>
+  <td>-0.066523729694132228</td>
+  <td align="right"> 5.86E-12</td>
+ </tr>
+ <tr>
+  <td>1.400</td>
+  <td>-0.0613845446</td>
+  <td>-0.061384544585116108</td>
+  <td align="right"> 1.48E-11</td>
+ </tr>
+ <tr>
+  <td>1.405</td>
+  <td>-0.0562700879</td>
+  <td>-0.056270087943841696</td>
+  <td align="right"> -4.38E-11</td>
+ </tr>
+ <tr>
+  <td>1.410</td>
+  <td>-0.0511801337</td>
+  <td>-0.051180133737897426</td>
+  <td align="right"> -3.78E-11</td>
+ </tr>
+ <tr>
+  <td>1.415</td>
+  <td>-0.0461144589</td>
+  <td>-0.04.6114458909301992</td>
+  <td align="right"> -9.30E-12</td>
+ </tr>
+ <tr>
+  <td>1.420</td>
+  <td>-0.0410728433</td>
+  <td>-0.041072843324024277</td>
+  <td align="right"> -2.40E-11</td>
+ </tr>
+ <tr>
+  <td>1.425</td>
+  <td>-0.0360550697</td>
+  <td>-0.036055069722547906</td>
+  <td align="right"> -2.25E-11</td>
+ </tr>
+ <tr>
+  <td>1.430</td>
+  <td>-0.0310609237</td>
+  <td>-0.031060923671447194</td>
+  <td align="right"> 2.85E-11</td>
+ </tr>
+ <tr>
+  <td>1.435</td>
+  <td>-0.0260901935</td>
+  <td>-0.02609019351596098</td>
+  <td align="right"> -1.59E-11</td>
+ </tr>
+ <tr>
+  <td>1.440</td>
+  <td>-0.0211426703</td>
+  <td>-0.021142670333530678</td>
+  <td align="right"> -3.35E-11</td>
+ </tr>
+ <tr>
+  <td>1.445</td>
+  <td>-0.0162181479</td>
+  <td>-0.016218147888283685</td>
+  <td align="right"> 1.17E-11</td>
+ </tr>
+ <tr>
+  <td>1.450</td>
+  <td>-0.0113164226</td>
+  <td>-0.011316422586445718</td>
+  <td align="right"> 1.35E-11</td>
+ </tr>
+ <tr>
+  <td>1.455</td>
+  <td>-0.0064372934</td>
+  <td>-0.0064372934326406561</td>
+  <td align="right"> -3.26E-11</td>
+ </tr>
+ <tr>
+  <td>1.460</td>
+  <td>-0.0015805620</td>
+  <td>-0.0015805619870833398</td>
+  <td align="right"> 1.29E-11</td>
+ </tr>
+ <tr>
+  <td>1.465</td>
+  <td>0.0032539677</td>
+  <td>0.0032539676763745362</td>
+  <td align="right"> -2.36E-11</td>
+ </tr>
+ <tr>
+  <td>1.470</td>
+  <td>0.0080664890</td>
+  <td>0.0080664890113649745</td>
+  <td align="right"> 1.13E-11</td>
+ </tr>
+ <tr>
+  <td>1.475</td>
+  <td>0.0128571930</td>
+  <td>0.012857193039295334</td>
+  <td align="right"> 3.92E-11</td>
+ </tr>
+ <tr>
+  <td>1.480</td>
+  <td>0.0176262684</td>
+  <td>0.017626268388849287</td>
+  <td align="right"> -1.11E-11</td>
+ </tr>
+ <tr>
+  <td>1.485</td>
+  <td>0.0223739013</td>
+  <td>0.022373901334705404</td>
+  <td align="right"> 3.47E-11</td>
+ </tr>
+ <tr>
+  <td>1.490</td>
+  <td>0.0271002758</td>
+  <td>0.027100275835486465</td>
+  <td align="right"> 3.54E-11</td>
+ </tr>
+ <tr>
+  <td>1.495</td>
+  <td>0.0318055736</td>
+  <td>0.031805573570971468</td>
+  <td align="right"> -2.90E-11</td>
+ </tr>
+ <tr>
+  <td>1.500</td>
+  <td>0.0364899740</td>
+  <td>0.036489973978576673</td>
+  <td align="right"> -2.14E-11</td>
+ </tr>
+ <tr>
+  <td>1.505</td>
+  <td>0.0411536543</td>
+  <td>0.041153654289123542</td>
+  <td align="right"> -1.08E-11</td>
+ </tr>
+ <tr>
+  <td>1.510</td>
+  <td>0.0457967896</td>
+  <td>0.045796789561914686</td>
+  <td align="right"> -3.80E-11</td>
+ </tr>
+ <tr>
+  <td>1.515</td>
+  <td>0.0504195527</td>
+  <td>0.050419552719128236</td>
+  <td align="right"> 1.91E-11</td>
+ </tr>
+ <tr>
+  <td>1.520</td>
+  <td>0.0550221146</td>
+  <td>0.055022114579551307</td>
+  <td align="right"> -2.04E-11</td>
+ </tr>
+ <tr>
+  <td>1.525</td>
+  <td>0.0596046439</td>
+  <td>0.05960464389166209</td>
+  <td align="right"> -8.33E-12</td>
+ </tr>
+ <tr>
+  <td>1.530</td>
+  <td>0.0641673074</td>
+  <td>0.064167307366077231</td>
+  <td align="right"> -3.39E-11</td>
+ </tr>
+ <tr>
+  <td>1.535</td>
+  <td>0.0687102697</td>
+  <td>0.068710269707385141</td>
+  <td align="right"> 7.38E-12</td>
+ </tr>
+ <tr>
+  <td>1.540</td>
+  <td>0.0732336936</td>
+  <td>0.073233693645366138</td>
+  <td align="right"> 4.53E-11</td>
+ </tr>
+ <tr>
+  <td>1.545</td>
+  <td>0.0777377300</td>
+  <td>0.077737739965624497</td>
+  <td align="right"> 9.96E-9</td>
+ </tr>
+ <tr>
+  <td>1.550</td>
+  <td>0.0822225675</td>
+  <td>0.082222567539644631</td>
+  <td align="right"> 3.96E-11</td>
+ </tr>
+ <tr>
+  <td>1.555</td>
+  <td>0.0866883334</td>
+  <td>0.086688333354268288</td>
+  <td align="right"> -4.57E-11</td>
+ </tr>
+ <tr>
+  <td>1.560</td>
+  <td>0.0911351925</td>
+  <td>0.091135192540635401</td>
+  <td align="right"> 4.06E-11</td>
+ </tr>
+ <tr>
+  <td>1.565</td>
+  <td>0.0955632984</td>
+  <td>0.095563298402570163</td>
+  <td align="right"> 2.57E-12</td>
+ </tr>
+ <tr>
+  <td>1.570</td>
+  <td>0.0999728024</td>
+  <td>0.099972802444444731</td>
+  <td align="right"> 4.44E-11</td>
+ </tr>
+ <tr>
+  <td>1.575</td>
+  <td>0.1043638544</td>
+  <td>0.10436385439851947</td>
+  <td align="right"> -1.48E-12</td>
+ </tr>
+ <tr>
+  <td>1.580</td>
+  <td>0.1087366023</td>
+  <td>0.10873660225178161</td>
+  <td align="right"> -4.82E-11</td>
+ </tr>
+ <tr>
+  <td>1.585</td>
+  <td>0.1130911923</td>
+  <td>0.11309119227228603</td>
+  <td align="right"> -2.77E-11</td>
+ </tr>
+ <tr>
+  <td>1.590</td>
+  <td>0.1174277690</td>
+  <td>0.11742776903501095</td>
+  <td align="right"> 3.50E-11</td>
+ </tr>
+ <tr>
+  <td>1.595</td>
+  <td>0.1217464754</td>
+  <td>0.12174647544723916</td>
+  <td align="right"> 4.72E-11</td>
+ </tr>
+ <tr>
+  <td>1.600</td>
+  <td>0.1260474528</td>
+  <td>0.12604745277347584</td>
+  <td align="right"> -2.65E-11</td>
+ </tr>
+ <tr>
+  <td>1.605</td>
+  <td>0.1303308407</td>
+  <td>0.13033084065991318</td>
+  <td align="right"> -4.00E-11</td>
+ </tr>
+ <tr>
+  <td>1.610</td>
+  <td>0.1345967772</td>
+  <td>0.13459677715844587</td>
+  <td align="right"> -4.15E-11</td>
+ </tr>
+ <tr>
+  <td>1.615</td>
+  <td>0.1388453988</td>
+  <td>0.13884539875025736</td>
+  <td align="right"> -4.97E-11</td>
+ </tr>
+ <tr>
+  <td>1.620</td>
+  <td>0.1430768404</td>
+  <td>0.14307684036898005</td>
+  <td align="right"> -3.10E-11</td>
+ </tr>
+ <tr>
+  <td>1.625</td>
+  <td>0.1472912354</td>
+  <td>0.14729123542343325</td>
+  <td align="right"> 2.34E-11</td>
+ </tr>
+ <tr>
+  <td>1.630</td>
+  <td>0.1514887158</td>
+  <td>0.15148871581995815</td>
+  <td align="right"> 1.99E-11</td>
+ </tr>
+ <tr>
+  <td>1.635</td>
+  <td>0.1556694120</td>
+  <td>0.15566941198435302</td>
+  <td align="right"> -1.56E-11</td>
+ </tr>
+ <tr>
+  <td>1.640</td>
+  <td>0.1598334529</td>
+  <td>0.15983345288341522</td>
+  <td align="right"> -1.65E-11</td>
+ </tr>
+ <tr>
+  <td>1.645</td>
+  <td>0.1639809660</td>
+  <td>0.16398096604610457</td>
+  <td align="right"> 4.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.650</td>
+  <td>0.1681120776</td>
+  <td>0.16811207758432767</td>
+  <td align="right"> -1.56E-11</td>
+ </tr>
+ <tr>
+  <td>1.655</td>
+  <td>0.1722269122</td>
+  <td>0.17222691221335784</td>
+  <td align="right"> 1.33E-11</td>
+ </tr>
+ <tr>
+  <td>1.660</td>
+  <td>0.1763255933</td>
+  <td>0.17632559327189457</td>
+  <td align="right"> -2.81E-11</td>
+ </tr>
+ <tr>
+  <td>1.665</td>
+  <td>0.1804082427</td>
+  <td>0.18040824274177392</td>
+  <td align="right"> 4.17E-11</td>
+ </tr>
+ <tr>
+  <td>1.670</td>
+  <td>0.1844749813</td>
+  <td>0.1844749812673292</td>
+  <td align="right"> -3.26E-11</td>
+ </tr>
+ <tr>
+  <td>1.675</td>
+  <td>0.1885259282</td>
+  <td>0.18852592817442249</td>
+  <td align="right"> -2.55E-11</td>
+ </tr>
+ <tr>
+  <td>1.680</td>
+  <td>0.1925612015</td>
+  <td>0.19256120148913258</td>
+  <td align="right"> -1.08E-11</td>
+ </tr>
+ <tr>
+  <td>1.685</td>
+  <td>0.1965809180</td>
+  <td>0.19658091795613342</td>
+  <td align="right"> -4.38E-11</td>
+ </tr>
+ <tr>
+  <td>1.690</td>
+  <td>0.2005851931</td>
+  <td>0.20058519305674649</td>
+  <td align="right"> -4.32E-11</td>
+ </tr>
+ <tr>
+  <td>1.695</td>
+  <td>0.2045741410</td>
+  <td>0.20457414102668603</td>
+  <td align="right"> 2.66E-11</td>
+ </tr>
+ <tr>
+  <td>1.700</td>
+  <td>0.2085478749</td>
+  <td>0.20854787487349435</td>
+  <td align="right"> -2.65E-11</td>
+ </tr>
+ <tr>
+  <td>1.705</td>
+  <td>0.2125065064</td>
+  <td>0.21250650639368796</td>
+  <td align="right"> -6.31E-12</td>
+ </tr>
+ <tr>
+  <td>1.710</td>
+  <td>0.2164501462</td>
+  <td>0.21645014618960501</td>
+  <td align="right"> -1.03E-11</td>
+ </tr>
+ <tr>
+  <td>1.715</td>
+  <td>0.2203789037</td>
+  <td>0.2203789036859658</td>
+  <td align="right"> -1.40E-11</td>
+ </tr>
+ <tr>
+  <td>1.720</td>
+  <td>0.2242928871</td>
+  <td>0.22429288714615725</td>
+  <td align="right"> 4.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.725</td>
+  <td>0.2281922037</td>
+  <td>0.22819220368823745</td>
+  <td align="right"> -1.17E-11</td>
+ </tr>
+ <tr>
+  <td>1.730</td>
+  <td>0.2320769593</td>
+  <td>0.23207695930067274</td>
+  <td align="right"> 6.72E-13</td>
+ </tr>
+ <tr>
+  <td>1.735</td>
+  <td>0.2359472589</td>
+  <td>0.23594725885781176</td>
+  <td align="right"> -4.21E-11</td>
+ </tr>
+ <tr>
+  <td>1.740</td>
+  <td>0.2398032061</td>
+  <td>0.23980320613509676</td>
+  <td align="right"> 3.50E-11</td>
+ </tr>
+ <tr>
+  <td>1.745</td>
+  <td>0.2436449038</td>
+  <td>0.24364490382402559</td>
+  <td align="right"> 2.40E-11</td>
+ </tr>
+ <tr>
+  <td>1.750</td>
+  <td>0.2474724535</td>
+  <td>0.2474724535468612</td>
+  <td align="right"> 4.68E-11</td>
+ </tr>
+ <tr>
+  <td>1.755</td>
+  <td>0.2512859559</td>
+  <td>0.25128595587109781</td>
+  <td align="right"> -2.89E-11</td>
+ </tr>
+ <tr>
+  <td>1.760</td>
+  <td>0.2550855103</td>
+  <td>0.25508551032368809</td>
+  <td align="right"> 2.36E-11</td>
+ </tr>
+ <tr>
+  <td>1.765</td>
+  <td>0.2588712154</td>
+  <td>0.25887121540503744</td>
+  <td align="right"> 5.03E-12</td>
+ </tr>
+ <tr>
+  <td>1.770</td>
+  <td>0.2626431686</td>
+  <td>0.26264316860276249</td>
+  <td align="right"> 2.76E-12</td>
+ </tr>
+ <tr>
+  <td>1.775</td>
+  <td>0.2664014664</td>
+  <td>0.2664014664052331</td>
+  <td align="right"> 5.23E-12</td>
+ </tr>
+ <tr>
+  <td>1.780</td>
+  <td>0.2701462043</td>
+  <td>0.27014620431488368</td>
+  <td align="right"> 1.48E-11</td>
+ </tr>
+ <tr>
+  <td>1.785</td>
+  <td>0.2738774769</td>
+  <td>0.27387747686131236</td>
+  <td align="right"> -3.86E-11</td>
+ </tr>
+ <tr>
+  <td>1.790</td>
+  <td>0.2775953776</td>
+  <td>0.27759537761416786</td>
+  <td align="right"> 1.41E-11</td>
+ </tr>
+ <tr>
+  <td>1.795</td>
+  <td>0.2812999992</td>
+  <td>0.2812999991958266</td>
+  <td align="right"> -4.17E-12</td>
+ </tr>
+ <tr>
+  <td>1.800</td>
+  <td>0.2849914333</td>
+  <td>0.2849914332938619</td>
+  <td align="right"> -6.13E-12</td>
+ </tr>
+ <tr>
+  <td>1.805</td>
+  <td>0.2886697707</td>
+  <td>0.28866977067331689</td>
+  <td align="right"> -2.66E-11</td>
+ </tr>
+ <tr>
+  <td>1.810</td>
+  <td>0.2923351012</td>
+  <td>0.29233510118877948</td>
+  <td align="right"> -1.12E-11</td>
+ </tr>
+ <tr>
+  <td>1.815</td>
+  <td>0.2959875138</td>
+  <td>0.29598751379626109</td>
+  <td align="right"> -3.73E-12</td>
+ </tr>
+ <tr>
+  <td>1.820</td>
+  <td>0.2996270966</td>
+  <td>0.29962709656488773</td>
+  <td align="right"> -3.51E-11</td>
+ </tr>
+ <tr>
+  <td>1.825</td>
+  <td>0.3032539367</td>
+  <td>0.30325393668840539</td>
+  <td align="right"> -1.15E-11</td>
+ </tr>
+ <tr>
+  <td>1.830</td>
+  <td>0.3068681205</td>
+  <td>0.30686812049650136</td>
+  <td align="right"> -3.49E-12</td>
+ </tr>
+ <tr>
+  <td>1.835</td>
+  <td>0.3104697335</td>
+  <td>0.31046973346594764</td>
+  <td align="right"> -3.40E-11</td>
+ </tr>
+ <tr>
+  <td>1.840</td>
+  <td>0.3140588602</td>
+  <td>0.31405886023156859</td>
+  <td align="right"> 3.15E-11</td>
+ </tr>
+ <tr>
+  <td>1.845</td>
+  <td>0.3176355846</td>
+  <td>0.31763558459703256</td>
+  <td align="right"> -2.96E-12</td>
+ </tr>
+ <tr>
+  <td>1.850</td>
+  <td>0.3211999895</td>
+  <td>0.32119998954547946</td>
+  <td align="right"> 4.54E-11</td>
+ </tr>
+ <tr>
+  <td>1.855</td>
+  <td>0.3247521572</td>
+  <td>0.32475215724997797</td>
+  <td align="right"> 4.99E-11</td>
+ </tr>
+ <tr>
+  <td>1.860</td>
+  <td>0.3282921691</td>
+  <td>0.32829216908382075</td>
+  <td align="right"> -1.61E-11</td>
+ </tr>
+ <tr>
+  <td>1.865</td>
+  <td>0.3318201056</td>
+  <td>0.33182010563065989</td>
+  <td align="right"> 3.06E-11</td>
+ </tr>
+ <tr>
+  <td>1.870</td>
+  <td>0.3353360467</td>
+  <td>0.33533604669448569</td>
+  <td align="right"> -5.51E-12</td>
+ </tr>
+ <tr>
+  <td>1.875</td>
+  <td>0.3388400713</td>
+  <td>0.33884007130944738</td>
+  <td align="right"> 9.44E-12</td>
+ </tr>
+ <tr>
+  <td>1.880</td>
+  <td>0.3423322577</td>
+  <td>0.34233225774952925</td>
+  <td align="right"> 4.95E-11</td>
+ </tr>
+ <tr>
+  <td>1.885</td>
+  <td>0.3458126835</td>
+  <td>0.34581268353806771</td>
+  <td align="right"> 3.80E-11</td>
+ </tr>
+ <tr>
+  <td>1.890</td>
+  <td>0.3492814255</td>
+  <td>0.34928142545713492</td>
+  <td align="right"> -4.28E-11</td>
+ </tr>
+ <tr>
+  <td>1.895</td>
+  <td>0.3527385596</td>
+  <td>0.35273855955676792</td>
+  <td align="right"> -4.32E-11</td>
+ </tr>
+ <tr>
+  <td>1.900</td>
+  <td>0.3561841612</td>
+  <td>0.35618416116406026</td>
+  <td align="right"> -3.59E-11</td>
+ </tr>
+ <tr>
+  <td>1.905</td>
+  <td>0.3596183049</td>
+  <td>0.35961830489211799</td>
+  <td align="right"> -7.88E-12</td>
+ </tr>
+ <tr>
+  <td>1.910</td>
+  <td>0.3630410646</td>
+  <td>0.36304106464888108</td>
+  <td align="right"> 4.88E-11</td>
+ </tr>
+ <tr>
+  <td>1.915</td>
+  <td>0.3664525136</td>
+  <td>0.36645251364580167</td>
+  <td align="right"> 4.58E-11</td>
+ </tr>
+ <tr>
+  <td>1.920</td>
+  <td>0.3698527244</td>
+  <td>0.36985272440640171</td>
+  <td align="right"> 6.40E-12</td>
+ </tr>
+ <tr>
+  <td>1.925</td>
+  <td>0.3732417688</td>
+  <td>0.37324176877469795</td>
+  <td align="right"> -2.53E-11</td>
+ </tr>
+ <tr>
+  <td>1.930</td>
+  <td>0.3766197179</td>
+  <td>0.37661971792349891</td>
+  <td align="right"> 2.34E-11</td>
+ </tr>
+ <tr>
+  <td>1.935</td>
+  <td>0.3799866424</td>
+  <td>0.37998664236258128</td>
+  <td align="right"> -3.74E-11</td>
+ </tr>
+ <tr>
+  <td>1.940</td>
+  <td>0.3833426119</td>
+  <td>0.38334261194674013</td>
+  <td align="right"> 4.67E-11</td>
+ </tr>
+ <tr>
+  <td>1.945</td>
+  <td>0.3866876959</td>
+  <td>0.38668769588372298</td>
+  <td align="right"> -1.62E-11</td>
+ </tr>
+ <tr>
+  <td>1.950</td>
+  <td>0.3900219627</td>
+  <td>0.39002196274204304</td>
+  <td align="right"> 4.20E-11</td>
+ </tr>
+ <tr>
+  <td>1.955</td>
+  <td>0.3933454805</td>
+  <td>0.39334548045868012</td>
+  <td align="right"> -4.13E-11</td>
+ </tr>
+ <tr>
+  <td>1.960</td>
+  <td>0.3966583163</td>
+  <td>0.39665831634666171</td>
+  <td align="right"> 4.66E-11</td>
+ </tr>
+ <tr>
+  <td>1.965</td>
+  <td>0.3999605371</td>
+  <td>0.39996053710254509</td>
+  <td align="right"> 2.54E-12</td>
+ </tr>
+ <tr>
+  <td>1.970</td>
+  <td>0.4032522088</td>
+  <td>0.40325220881377177</td>
+  <td align="right"> 1.37E-11</td>
+ </tr>
+ <tr>
+  <td>1.975</td>
+  <td>0.4065333970</td>
+  <td>0.40653339696592627</td>
+  <td align="right"> -3.40E-11</td>
+ </tr>
+ <tr>
+  <td>1.980</td>
+  <td>0.4098041664</td>
+  <td>0.40980416644989071</td>
+  <td align="right"> 4.98E-11</td>
+ </tr>
+ <tr>
+  <td>1.985</td>
+  <td>0.4130645816</td>
+  <td>0.41306458156888626</td>
+  <td align="right"> -3.11E-11</td>
+ </tr>
+ <tr>
+  <td>1.990</td>
+  <td>0.4163147060</td>
+  <td>0.41631470604541487</td>
+  <td align="right"> 4.54E-11</td>
+ </tr>
+ <tr>
+  <td>1.995</td>
+  <td>0.4195546030</td>
+  <td>0.41955460302810832</td>
+  <td align="right"> 2.81E-11</td>
+ </tr>
+ <tr>
+  <td>2.000</td>
+  <td>0.4227843351</td>
+  <td>0.42278433509846725</td>
+  <td align="right"> -1.53E-12</td>
+ </tr>
+</table>
+<<page foot>>
+@
+
 \subsection{draw.xhtml}
 <<draw.xhtml>>=
 <<standard head>>
@@ -21613,6 +42463,10 @@ infinity; the step size is any positive integer.
     <td><a href="ocwmit18085.xhtml"><b>Mathematical Methods</b></a></t=
d>
     <td>MIT 18-08 Mathematical Methods for Engineers Course Notes</td>
    </tr>
+   <tr>
+    <td><a href="cats.xhtml"><b>CATS</b></a></td>
+    <td>Computer Algebra Test Suite</td>
+   </tr>
   </table>
 <<page foot>>
 @
@@ -22148,7 +43002,7 @@ static char axiom_bits[] = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0=
0,
    0x00, 0x00, 0x00, 0x00};
 @
-       
+
 \section{License}
 <<license>>=
 --Copyright (c) 2007 Arthur C. Ralfs

\start
Date: Sun, 30 Dec 2007 20:45:35 -0600
From: Tim Daly
To: list
Subject: 20071230.02.tpd.patch (7057)

This patch updates the summation.input regression test to
conform to the new mathml output. This is part of the 7057 bug fix.

Tim

====================================================================
diff --git a/changelog b/changelog
index e080aa2..dad2dfe 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071230 tpd src/input/summation.input update tests with new mathml output
 20071229 acr src/algebra/mathml.spad fix sum ambiguity bug in mathml (7057)
 20071229 tpd src/hyper/bookvol11 add testpage for summation mathml (7057)
 20071229 tpd src/input/Makefile add summation regression test (7057)
diff --git a/src/input/summation.input.pamphlet b/src/input/summation.input.pamphlet
new file mode 100644
index 0000000..78b7aa7
--- /dev/null
+++ b/src/input/summation.input.pamphlet
@@ -0,0 +1,103 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input summation.input}
+\author{Timothy Daly}
+\maketitle
+\begin{abstract}
+The output of the sum and summation functions is ambiguous.
+The mathml.spad code has been changed to fix this but the
+problem still remains in the ascii output.
+This is bug 7057: summation is ambiguous.
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+<<*>>=
+)spool summation.output
+)set message test on
+)set message auto off
+)clear all
+ 
+--S 1 of 5
+summation(i^2,i=a..b)^(d-c)
+--R
+--R         b      d - c
+--R        --+    2
+--R   (1)  >     i
+--R        --+
+--R        i= a
+--R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
+--R<mrow><msup><mrow><mo>(</mo><mrow><munderover><mo>&#x02211;</mo><mrow><mrow><mrow><mi>i</mi></mrow><mo>=</mo><mrow><mi>a</mi></mrow></mrow></mrow><mrow><mi>b</mi></mrow></munderover><mrow><msup><mrow><mi>i</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>)</mo></mrow><mrow><mrow><mo>(</mo><mi>d</mi><mo>-</mo><mi>c</mi><mo>)</mo></mrow></mrow></msup></mrow>
+--R</math>
+--R
+--R                                                     Type: Expression Integer
+--E 1
+--S 2 of 5
+summation(i^2^(d-c),i=a..b)
+--R
+--R         b      d - c
+--R        --+    2
+--R   (2)  >     i
+--R        --+
+--R        i= a
+--R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
+--R<mrow><munderover><mo>&#x02211;</mo><mrow><mrow><mrow><mi>i</mi></mrow><mo>=</mo><mrow><mi>a</mi></mrow></mrow></mrow><mrow><mi>b</mi></mrow></munderover><mrow><msup><mrow><mi>i</mi></mrow><mrow><mrow><msup><mrow><mn>2</mn></mrow><mrow><mrow><mo>(</mo><mi>d</mi><mo>-</mo><mi>c</mi><mo>)</mo></mrow></mrow></msup></mrow></mrow></msup></mrow></mrow>
+--R</math>
+--R
+--R                                                     Type: Expression Integer
+--E 2
+--S 3 of 5
+sum(operator(f) (i)+1,i=1..n)
+--R
+--R         n
+--R        --+
+--R   (3)  >     f(i) + 1
+--R        --+
+--R        i= 1
+--R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
+--R<mrow><munderover><mo>&#x02211;</mo><mrow><mrow><mrow><mi>i</mi></mrow><mo>=</mo><mrow><mn>1</mn></mrow></mrow></mrow><mrow><mi>n</mi></mrow></munderover><mo>(</mo><mrow><mrow><mo><mi>f</mi></mo><mo>(</mo><mrow><mi>i</mi></mrow><mo>)</mo></mrow><mo>+</mo><mn>1</mn></mrow><mo>)</mo></mrow>
+--R</math>
+--R
+--R                                                     Type: Expression Integer
+--E 3
+--S 4 of 5
+sum(operator(f) (i),i=1..n)+1
+--R
+--R         n
+--R        --+
+--R   (4)  >     f(i) + 1
+--R        --+
+--R        i= 1
+--R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
+--R<mrow><mo>(</mo><mrow><munderover><mo>&#x02211;</mo><mrow><mrow><mrow><mi>i</mi></mrow><mo>=</mo><mrow><mn>1</mn></mrow></mrow></mrow><mrow><mi>n</mi></mrow></munderover><mrow><mo><mi>f</mi></mo><mo>(</mo><mrow><mi>i</mi></mrow><mo>)</mo></mrow></mrow><mo>)</mo><mo>+</mo><mn>1</mn></mrow>
+--R</math>
+--R
+--R                                                     Type: Expression Integer
+--E 4
+--S 5 of 5
+sum(operator(f) (i)+1,i=1..n)^3
+--R
+--R         n            3
+--R        --+
+--R   (5)  >     f(i) + 1
+--R        --+
+--R        i= 1
+--R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
+--R<mrow><msup><mrow><mo>(</mo><mrow><munderover><mo>&#x02211;</mo><mrow><mrow><mrow><mi>i</mi></mrow><mo>=</mo><mrow><mn>1</mn></mrow></mrow></mrow><mrow><mi>n</mi></mrow></munderover><mo>(</mo><mrow><mrow><mo><mi>f</mi></mo><mo>(</mo><mrow><mi>i</mi></mrow><mo>)</mo></mrow><mo>+</mo><mn>1</mn></mrow><mo>)</mo></mrow><mo>)</mo></mrow><mrow><mn>3</mn></mrow></msup></mrow>
+--R</math>
+--R
+--R                                                     Type: Expression Integer
+--E 5
+)spool 
+)lisp (bye)
+ 
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
+
+
+

\start
Date: Sun, 30 Dec 2007 20:47:32 -0600
From: Tim Daly
To: list
Subject: 20071230.03.tpd.patch (7052)

This is a minor cleanup fix. The makefile would remake this directory
even if it was up to date. 

Tim

====================================================================
diff --git a/changelog b/changelog
index dad2dfe..51a4abc 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20071230 tpd src/hyper/Makefile prevent spurious remake of axbook (7052)
 20071230 tpd src/input/summation.input update tests with new mathml output
 20071229 acr src/algebra/mathml.spad fix sum ambiguity bug in mathml (7057)
 20071229 tpd src/hyper/bookvol11 add testpage for summation mathml (7057)
diff --git a/src/hyper/Makefile.pamphlet b/src/hyper/Makefile.pamphlet
index 39c9ea8..95d03f3 100644
--- a/src/hyper/Makefile.pamphlet
+++ b/src/hyper/Makefile.pamphlet
@@ -1124,7 +1124,7 @@ ${MNT}/${SYS}/doc/bookvol11.dvi: ${IN}/bookvol11.pamphlet
 
 @
 <<axbook>>=
-${HYPER}/axbook/book-index.xhtml: ${IN}/axbook.tgz
+${HYPER}/axbook: ${IN}/axbook.tgz
 	@ echo 154 making ${HYPER}/axbook/xhtml from ${IN}/axbook.tgz
 	@( cd ${HYPER} ; tar -zxf ${IN}/axbook.tgz )
 

\start
Date: Sun, 30 Dec 2007 19:00:17 -0800 (PST)
From: Tim Daly
To: list
Subject: Funding open source

I had an interesting discussion with a finance professor from
the Univ. of Pittsburgh. We were discussing the issue of
funding open source software.

The suggestion came up of approaching sourceforge or their
parent company to set up an organization to handle money.

The funding would not cover pay but would cover funding for
group travel to a common location.

The idea is that this parent organization (SF has 165k projects,
and 1.7M registered developers) would get block grants from
various sources (NSF, IBM, RedHat, etc). The individual projects
could submit grant requests to cover funding for travel to a
common location, for meetings or sprint days. The parent
organization handles the paperwork of reimbursements for
travel, lodging, and other covered expenses by creating and
managing sub-grants.

This has the advantage that there is a financial accounting
organization handling the funding so the NSF can deal with
them. Overhead for running the organization would come from
the block grants (ala the Provost-style money grab at any
University).

This model of funding seems to answer the fundamental
question of how does money from places like the NSF get
to individual projects.

Additional funding tasks might involve packaging, advertising,
travel to conferences with accepted papers, and "top 10 awards"
for projects that are most used within a given timeframe.

Comments?

Tim



\end{verbatim}
\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cleardoublepage
%\phantomsection
\addcontentsline{toc}{chapter}{Bibliography}
\bibliographystyle{axiom}
\bibliography{axiom}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cleardoublepage
%\phantomsection
\addcontentsline{toc}{chapter}{Index}
\printindex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
