summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/cool
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-09-25 23:46:58 +0000
committerKarl Berry <karl@freefriends.org>2006-09-25 23:46:58 +0000
commitd4f96dc70d6aad918f541123e66589a2e44e18f1 (patch)
treebc933bc54a70e3ab4cf699a6c2d778b062287d16 /Master/texmf-dist/tex/latex/cool
parent66d540bf33713d5f36291b9e7c8a8f8039aebdb4 (diff)
new package cool (25sep06)
git-svn-id: svn://tug.org/texlive/trunk@2199 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/cool')
-rw-r--r--Master/texmf-dist/tex/latex/cool/cool.sty2631
1 files changed, 2631 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/cool/cool.sty b/Master/texmf-dist/tex/latex/cool/cool.sty
new file mode 100644
index 00000000000..51fa1ffe6fd
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/cool/cool.sty
@@ -0,0 +1,2631 @@
+%%
+%% This is file `cool.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cool.dtx (with options: `package')
+%%
+%% This is a generated file
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the Limited General Product License
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{cool}
+ [2006/09/17 v1.2 COntent Oriented LaTeX]
+\RequirePackage{ifthen}
+\RequirePackage{coollist}
+\RequirePackage{coolstr}
+\RequirePackage{forloop}
+\RequirePackage{amsmath}
+\RequirePackage{amssymb}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\newcounter{COOL@ct} %just a general counter
+\newcounter{COOL@ct@}%just a general counter
+\newcommand{\inp}[2][0cm]{\left(#2\parbox[h][#1]{0cm}{}\right)}
+ % in parentheses ()
+\newcommand{\inb}[2][0cm]{\left[#2\parbox[h][#1]{0cm}{}\right]}
+ % in brackets []
+\newcommand{\inbr}[2][0cm]{\left\{#2\parbox[h][#1]{0cm}{}\right\}}
+\newcommand{\inap}[2][0cm]{\left<{#2}\parbox[h][#1]{0cm}{}\right>}
+\newcommand{\nop}[1]{\left.{#1}\right.}
+\let\COOL@decide@paren@no@type=\relax
+\newcommand{\COOL@decide@paren}[3][\COOL@decide@paren@no@type]{%
+\ifthenelse{ \equal{#1}{\COOL@decide@paren@no@type} }%
+{%
+\def\COOL@decide@paren@type{\csname COOL@notation@#2Paren\endcsname}%
+}%
+{%
+\def\COOL@decide@paren@type{#1}%
+}%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{none} }%
+{%
+#3%
+}%
+{%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{p} }%
+{%
+\inp{#3}%
+}%
+{%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{b} }%
+{%
+\inb{#3}%
+}%
+{%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{br} }%
+{%
+\inbr{#3}%
+}%
+{%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{ap} }%
+{%
+\inap{#3}%
+}%
+{%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{inv} }%
+{%
+\nop{#3}%
+}%
+{%
+\PackageError{cool}{Invalid Parenthesis Option}%
+{*Paren can only be `none', `p', `b', `br', `ap', `inv'}%
+}%
+}%
+}%
+}%
+}%
+}%
+}
+\newcommand{\COOL@decide@indicies}[3]{%
+\def\COOL@decide@indicies@placement%
+{\csname COOL@notation@#1Indicies\endcsname}%
+\ifthenelse{\equal{\COOL@decide@indicies@placement}{local}}%
+{%
+\ifthenelse{\equal{#2}{u}}%
+{^{#3}}%
+{_{#3}}%
+}%
+{%
+\ifthenelse{\equal{\COOL@decide@indicies@placement}{up}}%
+{%
+{^{#3}}%
+}%
+{%
+\ifthenelse{\equal{\COOL@decide@indicies@placement}{down}}%
+{%
+{_{#3}}%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{#1Indices can only be 'up', 'down', or 'local'}%
+}%
+}%
+}%
+}
+\newcommand{\Style}[1]{%
+\COOL@keyeater#1,\COOL@keystop\COOL@keyend%
+}
+\newcommand{\COOL@keystop}{@@@}%
+\def\COOL@keyeater#1=#2,#3\COOL@keyend{%
+\ifx#3\COOL@keystop%
+\expandafter\gdef\csname COOL@notation@#1\endcsname{#2}%
+\else%
+\expandafter\gdef\csname COOL@notation@#1\endcsname{#2}%
+\COOL@keyeater#3\COOL@keyend%
+\fi%
+}
+\newcommand{\UseStyleFile}[1]{}
+\newcommand{\I}{i}
+\newcommand{\E}{e}
+\newcommand{\PI}{\pi}
+\newcommand{\GoldenRatio}{\varphi}
+\newcommand{\EulerGamma}{\gamma}
+\newcommand{\Catalan}{C}
+\newcommand{\Glaisher}{\mathord{\operatorname{Glaisher}}}
+\newcommand{\Khinchin}{\mathord{\operatorname{Khinchin}}}
+\newcommand{\Infinity}{\infty}
+\newcommand{\Indeterminant}{%
+\mathchoice%
+{\mbox{\textrm>}}%
+{\mbox{\small>}}%
+{\mbox{\scriptsize>}}%
+{\mbox{\tiny>}}%
+}
+\newcommand{\DirectedInfinity}[1]{#1 \, \infty}
+\newcommand{\DirInfty}[1]{\DirectedInfinity{#1}}
+\newcommand{\ComplexInfinity}{\tilde{\infty}}
+\newcommand{\CInfty}{\ComplexInfinity}
+\newcommand{\COOL@notation@ExpParen}{p}
+\newcommand{\Exp}[1]
+{%
+\exp\COOL@decide@paren{Exp}{#1}%
+}
+\newcommand{\COOL@notation@LogParen}{none}
+\newcommand{\COOL@notation@LogBaseESymb}{ln}% 'ln', 'log'
+\newcommand{\COOL@notation@LogShowBase}{at will}% 'at will', 'always'
+\newcommand{\Log}[2][\E]
+{%
+\ifthenelse{ \equal{\COOL@notation@LogShowBase}{at will} }%
+{%
+\ifthenelse{ \equal{#1}{\E} }%
+{%
+\ifthenelse{ \equal{\COOL@notation@LogBaseESymb}{ln} }%
+{%
+\ln \COOL@decide@paren{Log}{#2}%
+}%
+{%
+\ifthenelse{ \equal{\COOL@notation@LogBaseESymb}{log} }%
+{%
+\log \COOL@decide@paren{Log}{#2}%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{LogBaseESymb can only be `ln' or `log'}%
+}%
+}%
+}%
+{%
+\ifthenelse{ \equal{#1}{10} \AND
+\NOT \equal{\COOL@notation@LogBaseESymb}{log} }%
+{%
+\log \COOL@decide@paren{Log}{#2}%
+}%
+{%
+\log_{#1} \COOL@decide@paren{Log}{#2}%
+}%
+}%
+}%
+{%
+\ifthenelse{ \equal{\COOL@notation@LogShowBase}{always} }%
+{%
+\log_{#1}\COOL@decide@paren{Log}{#2}%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{LogShowBase can only be 'at will' or 'always'}%
+}%
+}%
+}
+\newcommand{\COOL@notation@SinParen}{p}
+\newcommand{\Sin}[1]{\sin\COOL@decide@paren{Sin}{#1}}
+\newcommand{\COOL@notation@CosParen}{p}
+\newcommand{\Cos}[1]{\cos\COOL@decide@paren{Cos}{#1}}
+\newcommand{\COOL@notation@TanParen}{p}
+\newcommand{\Tan}[1]{\tan\COOL@decide@paren{Tan}{#1}}
+\newcommand{\COOL@notation@CscParen}{p}
+\newcommand{\Csc}[1]{\csc\COOL@decide@paren{Csc}{#1}}
+\newcommand{\COOL@notation@SecParen}{p}
+\newcommand{\Sec}[1]{\sec\COOL@decide@paren{Sec}{#1}}
+\newcommand{\COOL@notation@CotParen}{p}
+\newcommand{\Cot}[1]{\cot\COOL@decide@paren{Cot}{#1}}
+\def\COOL@notation@ArcTrig{inverse}
+\newcommand{\COOL@notation@ArcSinParen}{p}
+\newcommand{\ArcSin}[1]{%
+\ifthenelse{ \equal{\COOL@notation@ArcTrig}{inverse} }%
+{%
+\sin^{-1}\COOL@decide@paren{ArcSin}{#1}%
+}
+{
+\ifthenelse{\equal{\COOL@notation@ArcTrig}{arc}}%
+{%
+\arcsin\COOL@decide@paren{ArcSin}{#1}%
+}%
+{%
+\PackageError{cool}{Invalid option sent}{}%
+}%
+}%
+}
+\newcommand{\COOL@notation@ArcCosParen}{p}
+\newcommand{\ArcCos}[1]{%
+\ifthenelse{ \equal{\COOL@notation@ArcTrig}{inverse} }%
+{%
+\cos^{-1}\COOL@decide@paren{ArcCos}{#1}%
+}%
+{%
+\ifthenelse{\equal{\COOL@notation@ArcTrig}{arc}}%
+{%
+\arccos\COOL@decide@paren{ArcCos}{#1}%
+}%
+{%
+\PackageError{cool}{Invalid option sent}{}%
+}%
+}%
+}
+\newcommand{\COOL@notation@ArcTanParen}{p}
+\newcommand{\ArcTan}[1]{%
+\ifthenelse{ \equal{\COOL@notation@ArcTrig}{inverse} }%
+{%
+\tan^{-1}\COOL@decide@paren{ArcTan}{#1}%
+}%
+{%
+\ifthenelse{\equal{\COOL@notation@ArcTrig}{arc}}%
+{%
+\arctan\COOL@decide@paren{ArcTan}{#1}%
+}%
+{%
+\PackageError{cool}{Invalid option sent}{}%
+}%
+}%
+}
+\newcommand{\COOL@notation@ArcCscParen}{p}
+\newcommand{\ArcCsc}[1]{\csc^{-1}\COOL@decide@paren{ArcCsc}{#1}}
+\newcommand{\COOL@notation@ArcSecParen}{p}
+\newcommand{\ArcSec}[1]{\sec^{-1}\COOL@decide@paren{ArcSec}{#1}}
+\newcommand{\COOL@notation@ArcCotParen}{p}
+\newcommand{\ArcCot}[1]{\cot^{-1}\COOL@decide@paren{ArcCot}{#1}}
+\newcommand{\COOL@notation@SinhParen}{p}
+\newcommand{\Sinh}[1]{\sinh\COOL@decide@paren{Sinh}{#1}}
+\newcommand{\COOL@notation@CoshParen}{p}
+\newcommand{\Cosh}[1]{\cosh\COOL@decide@paren{Cosh}{#1}}
+\newcommand{\COOL@notation@TanhParen}{p}
+\newcommand{\Tanh}[1]{\tanh\COOL@decide@paren{Tanh}{#1}}
+\newcommand{\COOL@notation@CschParen}{p}
+\DeclareMathOperator{\csch}{csch}
+\newcommand{\Csch}[1]{\csch\COOL@decide@paren{Csch}{#1}}
+\newcommand{\COOL@notation@SechParen}{p}
+\DeclareMathOperator{\sech}{sech}
+\newcommand{\Sech}[1]{\sech\COOL@decide@paren{Sech}{#1}}
+\newcommand{\COOL@notation@CothParen}{p}
+\newcommand{\Coth}[1]{\coth\COOL@decide@paren{Coth}{#1}}
+\newcommand{\COOL@notation@ArcSinhParen}{p}
+\newcommand{\ArcSinh}[1]{\sinh^{-1}\COOL@decide@paren{ArcSinh}{#1}}
+\newcommand{\COOL@notation@ArcCoshParen}{p}
+\newcommand{\ArcCosh}[1]{\cosh^{-1}\COOL@decide@paren{ArcCosh}{#1}}
+\newcommand{\COOL@notation@ArcTanhParen}{p}
+\newcommand{\ArcTanh}[1]{\tanh^{-1}\COOL@decide@paren{ArcTanh}{#1}}
+\newcommand{\COOL@notation@ArcCschParen}{p}
+\newcommand{\ArcCsch}[1]{\csch^{-1}\COOL@decide@paren{ArcCsch}{#1}}
+\newcommand{\COOL@notation@ArcSechParen}{p}
+\newcommand{\ArcSech}[1]{\sech^{-1}\COOL@decide@paren{ArcSech}{#1}}
+\newcommand{\COOL@notation@ArcCothParen}{p}
+\newcommand{\ArcCoth}[1]{\coth^{-1}\COOL@decide@paren{ArcCoth}{#1}}
+\newcommand{\LambertW}[1]{\ProductLog{#1}}
+\newcommand{\COOL@notation@ProductLogParen}{p}
+\newcommand{\ProductLog}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=1}%
+{%
+W\!\COOL@decide@paren{ProductLog}{#1}%
+}%
+{%
+\ifthenelse{\value{COOL@listpointer}=2}%
+{%
+W_{\listval{#1}{1}}\!\COOL@decide@paren{ProductLog}{\listval{#1}{2}}%
+}%
+{%
+\PackageError{cool}{`ProductLog' Invaid Argument}%
+{Must have a comma separated list of length 1 or 2}
+}%
+}%
+}
+\newcommand{\COOL@notation@MaxParen}{p}
+\newcommand{\Max}[1]{\max\COOL@decide@paren{Max}{#1}}
+\newcommand{\COOL@notation@MinParen}{p}
+\newcommand{\Min}[1]{\min\COOL@decide@paren{Min}{#1}}
+\newcommand{\COOL@notation@BesselJSymb}{J}
+\newcommand{\COOL@notation@BesselJParen}{p}
+\newcommand{\BesselJ}[2]%
+{\COOL@notation@BesselJSymb_{#1}\!\COOL@decide@paren{BesselJ}{#2}}
+\newcommand{\COOL@notation@BesselYSymb}{Y}
+\newcommand{\COOL@notation@BesselYParen}{p}
+\newcommand{\BesselY}[2]%
+{\COOL@notation@BesselYSymb_{#1}\!\COOL@decide@paren{BesselY}{#2}}
+\newcommand{\COOL@notation@BesselISymb}{I}
+\newcommand{\COOL@notation@BesselIParen}{p}
+\newcommand{\BesselI}[2]%
+{\COOL@notation@BesselISymb_{#1}\!\COOL@decide@paren{BesselI}{#2}}
+\newcommand{\COOL@notation@BesselKSymb}{K}
+\newcommand{\COOL@notation@BesselKParen}{p}
+\newcommand{\BesselK}[2]%
+{\COOL@notation@BesselKSymb_{#1}\!\COOL@decide@paren{BesselK}{#2}}
+\newcommand{\COOL@notation@AiryAiParen}{p}
+\DeclareMathOperator{\AiryAiSymb}{Ai}
+\newcommand{\AiryAi}[1]{\AiryAiSymb\!\COOL@decide@paren{AiryAi}{#1}}
+\newcommand{\COOL@notation@AiryBiParen}{p}
+\DeclareMathOperator{\AiryBiSymb}{Bi}
+\newcommand{\AiryBi}[1]{\AiryBiSymb\!\COOL@decide@paren{AiryBi}{#1}}
+\newcommand{\COOL@notation@StruveHParen}{p}
+\newcommand{\StruveH}[2]{ {\bf H}_{#1}\!\COOL@decide@paren{StruveH}{#2}}
+\newcommand{\COOL@notation@StruveLParen}{p}
+\newcommand{\StruveL}[2]{ {\bf L}_{#1}\!\COOL@decide@paren{StruveL}{#2}}
+\newcommand{\Floor}[1]{\lfloor #1 \rfloor}
+\newcommand{\Ceiling}[1]{\lceil #1 \rceil}
+\newcommand{\Round}[1]{\lfloor #1 \rceil}
+\newcommand{\COOL@notation@IntegerPartParen}{p}
+\DeclareMathOperator{\iPartSymb}{int}
+\newcommand{\iPart}[1]{\iPartSymb\COOL@decide@paren{IntegerPart}{#1}}
+\newcommand{\IntegerPart}[1]{\iPart{#1}}
+\newcommand{\COOL@notation@FractionalPartParen}{p}
+\DeclareMathOperator{\fPartSymb}{frac}
+\newcommand{\fPart}[1]{\fPartSymb\COOL@decide@paren{FractionalPart}{#1}}
+\newcommand{\FractionalPart}[1]{\fPart{#1}}
+\newcommand{\COOL@notation@ModDisplay}{mod}
+\newcommand{\Mod}[2]{%
+\ifthenelse{\equal{\COOL@notation@ModDisplay}{mod}}%
+{%
+#1 \mod #2%
+}%
+{ \ifthenelse{\equal{\COOL@notation@ModDisplay}{bmod}}%
+{%
+#1 \bmod #2%
+}%
+{ \ifthenelse{\equal{\COOL@notation@ModDisplay}{pmod}}%
+{%
+#1 \pmod #2%
+}%
+{\ifthenelse{\equal{\COOL@notation@ModDisplay}{pod}}%
+{%
+#1 \pod #2%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{ModDisplay can only be `mod', `bmod', `pmod', or `pod'}%
+}}}}%
+}
+\newcommand{\COOL@notation@QuotientParen}{p}
+\DeclareMathOperator{\QuotientSymb}{quotient}
+\newcommand{\Quotient}[2]%
+{\QuotientSymb\COOL@decide@paren{Quotient}{#1,#2}}
+\newcommand{\COOL@notation@GCDParen}{p}
+\newcommand{\GCD}[1]{\gcd\COOL@decide@paren{GCD}{#1}}
+\newcommand{\COOL@notation@ExtendedGCDParen}{p}
+\DeclareMathOperator{\ExtendedGCDSymb}{egcd}
+\newcommand{\ExtendedGCD}[2]%
+{\ExtendedGCDSymb\COOL@decide@paren{ExtendedGCD}{#1,#2}}
+\newcommand{\EGCD}[2]{\ExtendedGCD{#1}{#2}}
+\newcommand{\COOL@notation@LCMParen}{p}
+\DeclareMathOperator{\LCMSymb}{lcm}
+\newcommand{\LCM}[1]{\LCMSymb\COOL@decide@paren{LCM}{#1}}
+\newcommand{\COOL@notation@FibonacciParen}{p}
+\newcommand{\Fibonacci}[1]{%
+\liststore{#1}{COOL@Fibonacci@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+F_{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+F_{\COOL@Fibonacci@arg@i}\!%
+\COOL@decide@paren{Fibonacci}{\COOL@Fibonacci@arg@ii}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Fibonacci' can only accept a
+comma separate list of length 1 or 2}%
+}}%
+}
+\newcommand{\COOL@notation@EulerParen}{p}
+\newcommand{\Euler}[1]{%
+\liststore{#1}{COOL@Euler@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+E_{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+E_{\COOL@Euler@arg@i}\!%
+\COOL@decide@paren{Euler}{\COOL@Euler@arg@ii}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Euler' can only accept a
+comma separate list of length 1 or 2}%
+}}%
+}
+\newcommand{\COOL@notation@BernoulliParen}{p}
+\newcommand{\Bernoulli}[1]{%
+\liststore{#1}{COOL@Bernoulli@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+B_{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+B_{\COOL@Bernoulli@arg@i}\!%
+\COOL@decide@paren{Bernoulli}{\COOL@Bernoulli@arg@ii}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Bernoulli' can only accept a
+comma separate list of length 1 or 2}%
+}}%
+}
+\newcommand{\StirlingSOne}[2]{S_{#1}^{\inp{#2}}}
+\newcommand{\StirlingSTwo}[2]{{\cal S}_{#1}^{\inp{#2}}}
+\newcommand{\COOL@notation@PartitionsPParen}{p}
+\newcommand{\PartitionsP}[1]{p\!\COOL@decide@paren{PartitionsP}{#1}}
+\newcommand{\COOL@notation@PartitionsQParen}{p}
+\newcommand{\PartitionsQ}[1]{q\!\COOL@decide@paren{PartitionsQ}{#1}}
+\newcommand{\COOL@notation@DiscreteDeltaParen}{p}
+\newcommand{\DiscreteDelta}[1]%
+{\delta\COOL@decide@paren{DiscreteDelta}{#1}}
+\newcommand{\COOL@notation@KroneckerDeltaUseComma}{false}%
+\newcommand{\COOL@notation@KroneckerDeltaIndicies}{local}
+\newcommand{\KroneckerDelta}[2][u]{%
+\liststore{#2}{COOL@arg@}%
+\listval{#2}{0}%
+\def\COOL@arg@temp{}%
+\forLoop{1}{\value{COOL@listpointer}}{COOL@ct}%
+{%
+\ifthenelse{\equal{\COOL@notation@KroneckerDeltaUseComma}{true}}%
+{%
+\ifthenelse{\NOT \value{COOL@ct} = 1}
+{%
+\edef\COOL@arg@temp%
+{\COOL@arg@temp, \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+}%
+{%
+\edef\COOL@arg@temp%
+{\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+}%
+}%
+{%
+\edef\COOL@arg@temp%
+{\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+}%
+}%
+\delta\COOL@decide@indicies{KroneckerDelta}{#1}{\COOL@arg@temp}%
+}
+\newcommand{\COOL@notation@LeviCivitaUseComma}{false}
+\newcommand{\COOL@notation@LeviCivitaIndicies}{local}
+\newcommand{\LeviCivita}[2][u]{%
+\liststore{#2}{COOL@arg@}%
+\listval{#2}{0}%
+\def\COOL@arg@temp{}%
+\forLoop{1}{\value{COOL@listpointer}}{COOL@ct}%
+{%
+\ifthenelse{\equal{\COOL@notation@LeviCivitaUseComma}{true}}%
+{%
+\ifthenelse{\NOT \value{COOL@ct} = 1}{,}{}%
+\edef\COOL@arg@temp%
+{\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+}%
+{%
+\edef\COOL@arg@temp%
+{\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+}%
+}%
+\epsilon\COOL@decide@indicies{LeviCivita}{#1}{\COOL@arg@temp}%
+}%
+\newcommand{\Signature}[2][u]{\LeviCivita[#1]{#2}}
+\newcommand{\COOL@notation@HermiteHParen}{p}
+\newcommand{\COOL@notation@HermiteHSymb}{H}
+\newcommand{\HermiteH}[2]%
+{\COOL@notation@HermiteHSymb_{#1}\!\COOL@decide@paren{HermiteH}{#2}}
+\newcommand{\COOL@notation@LaugerreLParen}{p}
+\newcommand{\COOL@notation@LaugerreLSymb}{L}
+\newcommand{\LaugerreL}[1]{%
+\liststore{#1}{COOL@list@temp@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=2}%
+{%
+\COOL@notation@LaugerreLSymb_{\COOL@list@temp@i}%
+\!\COOL@decide@paren{LaugerreL}{\COOL@list@temp@ii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer}=3}%
+{%
+\COOL@notation@LaugerreLSymb_{\COOL@list@temp@i}^{\COOL@list@temp@ii}%
+\!\COOL@decide@paren{LaugerreL}{\COOL@list@temp@iii}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`LaugerrL' only accepts a comma separated list of length 2 or 3}%
+}}%
+}
+\newcommand{\COOL@notation@LegendrePParen}{p}
+\newcommand{\COOL@notation@LegendrePSymb}{P}
+\newcommand{\LegendreP}[1]{%
+\liststore{#1}{COOL@LegendreP@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\COOL@notation@LegendrePSymb_{\COOL@LegendreP@arg@i}\!%
+\COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@ii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+\COOL@notation@LegendrePSymb_{\COOL@LegendreP@arg@i}%
+^{\COOL@LegendreP@arg@ii}\!%
+\COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@iii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+{%
+\isint{\COOL@LegendreP@arg@iii}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\ifcase\COOL@LegendreP@arg@iii\relax%
+\PackageError{cool}{Invalid Argument}%
+{`LegendreP' third argument must be $>$ 1}%
+\or%
+\PackageError{cool}{Invalid Argument}%
+{`LegendreP' third argument must be $>$ 1}%
+\or%
+\COOL@notation@LegendrePSymb_{\COOL@LegendreP@arg@i}%
+^{\COOL@LegendreP@arg@ii}\!%
+\COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@iv}%
+\or%
+{\cal P}_{\COOL@LegendreP@arg@i}%
+^{\COOL@LegendreP@arg@ii}\!%
+\COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@iv}%
+\else%
+\PackageError{cool}{Invalid Argument}{unsupported}%
+\fi%
+}
+{%
+\PackageError{cool}{Invalid Argument}{third arg must be int}%
+}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`LegendreP' can only accept a%
+ comma separated list of length 2-4}%
+}}}%
+}
+\newcommand{\COOL@notation@LegendreQParen}{p}
+\newcommand{\COOL@notation@LegendreQSymb}{Q}
+\newcommand{\LegendreQ}[1]{%
+\liststore{#1}{COOL@LegendreQ@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\COOL@notation@LegendreQSymb_{\COOL@LegendreQ@arg@i}\!%
+\COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@ii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+\COOL@notation@LegendreQSymb_{\COOL@LegendreQ@arg@i}%
+^{\COOL@LegendreQ@arg@ii}\!%
+\COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@iii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+{%
+\isint{\COOL@LegendreQ@arg@iii}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\ifcase\COOL@LegendreQ@arg@iii\relax%
+\PackageError{cool}{Invalid Argument}%
+{`LegendreQ' third argument must be $>$ 1}%
+\or%
+\PackageError{cool}{Invalid Argument}%
+{`LegendreQ' third argument must be $>$ 1}%
+\or%
+\COOL@notation@LegendreQSymb_{\COOL@LegendreQ@arg@i}%
+^{\COOL@LegendreQ@arg@ii}\!%
+\COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@iv}%
+\or%
+{\cal Q}_{\COOL@LegendreQ@arg@i}%
+^{\COOL@LegendreQ@arg@ii}\!%
+\COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@iv}%
+\else%
+\PackageError{cool}{Invalid Argument}{unsupported}%
+\fi%
+}
+{%
+\PackageError{cool}{Invalid Argument}{third arg must be int}%
+}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`LegendreQ' can only accept a%
+ comma separated list of length 2-4}%
+}}}%
+}
+\newcommand{\COOL@notation@ChebyshevTParen}{p}
+\newcommand{\COOL@notation@ChebyshevTSymb}{T}
+\newcommand{\ChebyshevT}[2]%
+{\COOL@notation@ChebyshevTSymb_{#1}\!\COOL@decide@paren{ChebyshevT}{#2}}
+\newcommand{\COOL@notation@ChebyshevUParen}{p}
+\newcommand{\COOL@notation@ChebyshevUSymb}{U}
+\newcommand{\ChebyshevU}[2]%
+{\COOL@notation@ChebyshevUSymb_{#1}\!\COOL@decide@paren{ChebyshevU}{#2}}
+\newcommand{\COOL@notation@JacobiPParen}{p}
+\newcommand{\COOL@notation@JacobiPSymb}{P}
+\newcommand{\JacobiP}[4]{%
+\COOL@notation@JacobiPSymb_{#1}^{\inp{#2, #3}}%
+\!\COOL@decide@paren{JacobiP}{#4}%
+}
+\newcommand{\AssocLegendreP}[3]{\LegendreP{#1,#2,#3}}
+\newcommand{\AssocLegendreQ}[3]{\LegendreQ{#1,#2,#3}}
+\newcommand{\COOL@notation@GegenbauerCParen}{p}
+\newcommand{\COOL@notation@GegenbauerCSymb}{C}
+\newcommand{\GegenbauerC}[3]{%
+\COOL@notation@GegenbauerCSymb_{#1}^{#2}%
+\!\COOL@decide@paren{GegenbauerC}{#3}%
+}
+\newcommand{\COOL@notation@SphericalHarmonicYParen}{p}
+\newcommand{\COOL@notation@SphericalHarmonicYSymb}{Y}
+\newcommand{\SphericalHarmonicY}[4]{%
+\COOL@notation@SphericalHarmonicYSymb_{#1}^{#2}%
+\!\COOL@decide@paren{SphericalHarmonicY}{#3,#4}%
+}
+\newcommand{\SphericalHarmY}[4]{\SphericalHarmonicY{#1}{#2}{#3}{#4}}
+\newcommand{\SpHarmY}[4]{\SphericalHarmonicY{#1}{#2}{#3}{#4}}
+\newcommand{\COOL@notation@CyclotomicCParen}{p}
+\newcommand{\CyclotomicC}[2]%
+{C_{#1}\!\COOL@decide@paren{CyclotomicC}{#2}}
+\newcommand{\FibonacciF}[2]{\Fibonacci{#1,#2}}
+\newcommand{\EulerE}[2]{\Euler{#1,#2}}
+\newcommand{\BernoulliB}[2]{\Bernoulli{#1,#2}}
+\newcommand{\Factorial}[1]{#1!}
+\newcommand{\DblFactorial}[1]{#1!!}
+\newcommand{\Binomial}[2]{ \binom{#1}{#2} }
+\newcommand{\Multinomial}[1]%
+{%
+\listval{#1}{0}% get the length of the list
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}% record length
+\liststore{#1}{COOL@list@temp@}%
+\isint{\COOL@list@temp@i}% check that the entries are integers
+\setcounter{COOL@ct}{2}%
+\whiledo{ \boolean{COOL@isint} \AND
+\NOT \value{COOL@ct}>\value{COOL@listlen} }%
+{%
+\def\COOL@Multinomial@tempa%
+{\csname COOL@list@temp@\roman{COOL@ct}\endcsname}%
+\isint{\COOL@Multinomial@tempa}%
+\stepcounter{COOL@ct}%
+}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\setcounter{COOL@ct@}{ \COOL@list@temp@i }% records the sum
+\forLoop{2}{\value{COOL@listlen}}{COOL@ct}%
+{%
+\addtocounter{COOL@ct@}%
+{\csname COOL@list@temp@\roman{COOL@ct}\endcsname}%
+}%
+\left(\arabic{COOL@ct@}%
+}%
+{%
+\left(%
+\listval{#1}{1}%
+\forLoop{2}{\value{COOL@listlen}}{COOL@ct}%
+{%
++ \listval{#1}{\arabic{COOL@ct}}%
+}%
+}%
+;#1\right)%
+}
+\newcommand{\COOL@notation@GammaFuncParen}{p}
+\newcommand{\GammaFunc}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\Gamma\!\COOL@decide@paren{GammaFunc}{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\Gamma\!\COOL@decide@paren{GammaFunc}{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+\Gamma\!\COOL@decide@paren{GammaFunc}{#1}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`GammaFunc' can only accept a comma separate list of length 1 to 3}%
+}%
+}}%
+}
+\newcommand{\IncGamma}[2]{\GammaFunc{#1,#2}}
+\newcommand{\GenIncGamma}[3]{\GammaFunc{#1, #2, #3}}
+\newcommand{\COOL@notation@GammaRegularizedParen}{p}%
+\newcommand{\GammaRegularized}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+Q\!\COOL@decide@paren{GammaRegularized}{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+Q\!\COOL@decide@paren{GammaRegularized}{#1}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`GammaRegularized' can only accept comma%
+ separated lists of length 2 or 3}%
+}%
+}%
+}
+\newcommand{\RegIncGamma}[2]{\GammaRegularized{#1, #2}}
+\newcommand{\GammaReg}[1]{\GammaRegularized{#1}}
+\newcommand{\COOL@notation@InverseGammaRegularizedParen}{p}
+\newcommand{\InverseGammaRegularized}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+Q^{-1}\!\COOL@decide@paren{InverseGammaRegularized}{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+Q^{-1}\!\COOL@decide@paren{InverseGammaRegularized}{#1}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`InverseGammaRegularized' can only accept%
+ a comma separated list of length 2 or 3}%
+}%
+}%
+}
+\newcommand{\RegIncGammaInv}[2]{\InverseGammaRegularized{#1, #2}}
+\newcommand{\GammaRegInv}[1]{\InverseGammaRegularized{#1}}
+\newcommand{\GenRegIncGamma}[3]{\GammaRegularized{#1, #2, #3}}
+\newcommand{\GenRegIncGammaInv}[3]{\InverseGammaRegularized{#1, #2, #3}}
+\newcommand{\Pochhammer}[2]{\inp{#1}_{#2}}
+\newcommand{\COOL@notation@LogGammaParen}{p}
+\DeclareMathOperator{\LogGammaSymb}{log\Gamma}
+\newcommand{\LogGamma}[1]{\LogGammaSymb\COOL@decide@paren{LogGamma}{#1}}
+\newcommand{\COOL@notation@DiGammaParen}{p}
+\newcommand{\DiGamma}[1]{\digamma\!\COOL@decide@paren{DiGamma}{#1}}
+\newcommand{\COOL@notation@PolyGammaParen}{p}
+\newcommand{\PolyGamma}[2]%
+{\psi^{\inp{#1}}\!\COOL@decide@paren{PolyGamma}{#2}}
+\newcommand{\HarmNum}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=1}%
+{%
+H_{#1}
+}%
+{ \ifthenelse{\value{COOL@listpointer}=2}%
+{%
+\liststore{#1}{COOL@list@temp@}%
+H^{\inp{\COOL@list@temp@ii}}_{\COOL@list@temp@i}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Harm Num' can only accept a comma separated list of length 1 or 2}%
+}}%
+}
+\newcommand{\COOL@notation@BetaParen}{p}
+\newcommand{\Beta}[1]{%
+\liststore{#1}{COOL@Beta@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+B\!\COOL@decide@paren{Beta}{\COOL@Beta@arg@i, \COOL@Beta@arg@ii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+B_{\COOL@Beta@arg@i}\!%
+\COOL@decide@paren{Beta}{\COOL@Beta@arg@ii, \COOL@Beta@arg@iii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+{%
+B_{\inp{\COOL@Beta@arg@i,\COOL@Beta@arg@ii}}\!%
+\COOL@decide@paren{Beta}{\COOL@Beta@arg@iii, \COOL@Beta@arg@iv}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Beta' can only accept a comma separated list of length 2 to 4}%
+}%
+}}%
+}
+\newcommand{\IncBeta}[3]{\Beta{#1,#2, #3}}
+\newcommand{\GenIncBeta}[4]{\Beta{#1,#2,#3,#4}}
+\newcommand{\COOL@notation@BetaRegularizedParen}{p}
+\newcommand{\BetaRegularized}[1]{%
+\liststore{#1}{COOL@BetaRegularized@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+I_{\COOL@BetaRegularized@arg@i}\!%
+\COOL@decide@paren{BetaRegularized}%
+{\COOL@BetaRegularized@arg@ii, \COOL@BetaRegularized@arg@iii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+{%
+I_{\inp{\COOL@BetaRegularized@arg@i, \COOL@BetaRegularized@arg@ii}}\!%
+\COOL@decide@paren{BetaRegularized}%
+{\COOL@BetaRegularized@arg@iii, \COOL@BetaRegularized@arg@iv}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`BetaRegularized' can only accept%
+ a comma separated list of length 3 or 4}%
+}%
+}%
+}
+\newcommand{\RegIncBeta}[3]{\BetaRegularized{#1,#2,#3}}
+\newcommand{\BetaReg}[1]{\BetaRegularized{#1}}
+\newcommand{\COOL@notation@InverseBetaRegularizedParen}{p}
+\newcommand{\InverseBetaRegularized}[1]{%
+\liststore{#1}{COOL@InverseBetaRegularized@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+I^{-1}_{\COOL@InverseBetaRegularized@arg@i}\!%
+\COOL@decide@paren{InverseBetaRegularized}%
+{\COOL@InverseBetaRegularized@arg@ii,%
+ \COOL@InverseBetaRegularized@arg@iii}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+{%
+I^{-1}_{\inp{ \COOL@InverseBetaRegularized@arg@i,%
+\COOL@InverseBetaRegularized@arg@ii%
+ }%
+}\!%
+\COOL@decide@paren{InverseBetaRegularized}%
+{\COOL@InverseBetaRegularized@arg@iii,%
+ \COOL@InverseBetaRegularized@arg@iv}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`InverseBetaRegularized' can only accept%
+ a comma separated list of length 3 or 4}%
+}%
+}%
+}
+\newcommand{\RegIncBetaInv}[3]{\InverseBetaRegularized{#1,#2,#3}}
+\newcommand{\BetaRegInv}[1]{\InverseBetaRegularized{#1}}
+\newcommand{\GenRegIncBeta}[4]{\Beta{#1,#2,#3,#4}}
+\newcommand{\GenRegIncBetaInv}[4]{\InverseBetaRegularized{#1,#2,#3,#4}}
+\newcommand{\COOL@notation@ErfParen}{p}
+\DeclareMathOperator{\ErfSymb}{erf}
+\newcommand{\Erf}[1]{%
+\liststore{#1}{COOL@Erf@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\ErfSymb\!\COOL@decide@paren{Erf}{#1}
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\ErfSymb\!\COOL@decide@paren{Erf}{#1}
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Erf' can only accept a comma separated list of length 1 or 2}%
+}%
+}%
+}
+\newcommand{\COOL@notation@ErfInvParen}{p}
+\newcommand{\ErfInv}[1]{%
+\liststore{#1}{COOL@Erf@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\ErfSymb^{-1}\!\COOL@decide@paren{ErfInv}{#1}
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\ErfSymb^{-1}\!\COOL@decide@paren{ErfInv}{#1}
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Erf' can only accept a comma separated list of length 1 or 2}%
+}%
+}%
+}
+
+\newcommand{\GenErf}[2]{\Erf{#1,#2}}
+\newcommand{\GenErfInv}[2]{\ErfInv{#1, #2}}
+\newcommand{\COOL@notation@ErfcParen}{p}
+\DeclareMathOperator{\ErfcSymb}{erfc}
+\newcommand{\Erfc}[1]{\ErfcSymb\!\COOL@decide@paren{Erfc}{#1}}
+\newcommand{\COOL@notation@ErfcInvParen}{p}
+\newcommand{\ErfcInv}[1]%
+{\ErfcSymb^{-1}\!\COOL@decide@paren{ErfcInv}{#1}}
+\newcommand{\COOL@notation@ErfiParen}{p}
+\DeclareMathOperator{\ErfiSymb}{erfi}
+\newcommand{\Erfi}[1]{\ErfiSymb\!\COOL@decide@paren{Erfi}{#1}}
+\newcommand{\COOL@notation@FresnelSParen}{p}
+\newcommand{\FresnelS}[1]{S\!\COOL@decide@paren{FresnelS}{#1}}
+\newcommand{\COOL@notation@FresnelCParen}{p}
+\newcommand{\FresnelC}[1]{C\!\COOL@decide@paren{FresnelC}{#1}}
+\newcommand{\COOL@notation@ExpIntEParen}{p}
+\newcommand{\ExpIntE}[2]{E_{#1}\!\COOL@decide@paren{ExpIntE}{#2}}
+\newcommand{\COOL@notation@ExpIntEiParen}{p}
+\DeclareMathOperator{\ExpIntEiSymb}{Ei}
+\newcommand{\ExpIntEi}[1]%
+{\ExpIntEiSymb\!\COOL@decide@paren{ExpIntEi}{#1}}
+\newcommand{\COOL@notation@LogIntParen}{p}
+\DeclareMathOperator{\LogIntSymb}{li}
+\newcommand{\LogInt}[1]{\LogIntSymb\!\COOL@decide@paren{LogInt}{#1}}
+\newcommand{\COOL@notation@SinIntParen}{p}
+\DeclareMathOperator{\SinIntSymb}{Si}
+\newcommand{\SinInt}[1]{\SinIntSymb\!\COOL@decide@paren{SinInt}{#1}}
+\newcommand{\COOL@notation@CosIntParen}{p}
+\DeclareMathOperator{\CosIntSymb}{Ci}
+\newcommand{\CosInt}[1]{\CosIntSymb\!\COOL@decide@paren{CosInt}{#1}}
+\newcommand{\COOL@notation@SinhIntParen}{p}
+\DeclareMathOperator{\SinhIntSymb}{Shi}
+\newcommand{\SinhInt}[1]{\SinhIntSymb\!\COOL@decide@paren{SinhInt}{#1}}
+\newcommand{\COOL@notation@CoshIntParen}{p}
+\DeclareMathOperator{\CoshIntSymb}{Chi}
+\newcommand{\CoshInt}[1]{\CoshIntSymb\!\COOL@decide@paren{CoshInt}{#1}}
+\newcommand{\COOL@Hypergeometric@pq@ab@value}[4]{%
+\ifthenelse{\boolean{COOL@#1@isint} \AND \boolean{COOL@#3@islist}}%
+{% #1 is an INT and #3 is a LIST
+\ifthenelse{ #2 = 0 }%
+{%
+\PackageWarning{cool}{`#3'-arg ignored}%
+}%
+{%
+\ifthenelse{ #2 = 1 }%
+{%
+\PackageError{cool}{`Hypergeometric' `#1'-arg mismatch with `#3'-arg}{}%
+}%
+{%
+#4%
+}%
+}%
+}%
+{}%
+\ifthenelse{ \boolean{COOL@#1@isint} \AND
+\NOT \boolean{COOL@#3@islist} }%
+{%
+\ifthenelse{ #2 = 0 }%
+{%
+}%
+{%
+\ifthenelse{ #2 = 1 }%
+{%
+#4%
+}%
+{%
+\forLoop{1}{#2}{COOL@ct}
+{%
+\ifthenelse{ \value{COOL@ct} = 1 }{}{,}%
+#4_{\arabic{COOL@ct}}%
+}% end for loop
+}%
+}%
+}%
+{}%
+\ifthenelse{ \NOT \boolean{COOL@#1@isint} \AND
+\boolean{COOL@#3@islist} }%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`Hypergeometric': `#1'-arg is not int but `#3'-arg is list}
+}%
+{}%
+\ifthenelse{ \NOT \boolean{COOL@#1@isint} \AND
+\NOT \boolean{COOL@#3@islist} }%
+{%
+#4_1,\ldots,#4_{#2}%
+}%
+{}%
+}%
+\newcommand{\COOL@notation@HypergeometricParen}{p}
+\newcommand{\COOL@notation@HypergeometricSymb}{F}
+\newcommand{\Hypergeometric}[6][F]{%
+\provideboolean{COOL@p@isint}%
+\provideboolean{COOL@q@isint}%
+\provideboolean{COOL@a@islist}%
+\provideboolean{COOL@b@islist}%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+{\setboolean{COOL@p@isint}{true}}%
+{\setboolean{COOL@p@isint}{false}}%
+\isint{#3}%
+\ifthenelse{\boolean{COOL@isint}}%
+{\setboolean{COOL@q@isint}{true}}%
+{\setboolean{COOL@q@isint}{false}}%
+\listval{#4}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+{\setboolean{COOL@a@islist}{true}}%
+{\setboolean{COOL@a@islist}{false}}%
+\ifthenelse{ \boolean{COOL@p@isint} \AND
+\boolean{COOL@a@islist} \AND
+\NOT \( #2 = \value{COOL@listpointer} \) }%
+{%
+\PackageError{cool}{`Hypergeometric' `p'-arg mismatch with `a'-arg}{}%
+}%
+{}%
+\listval{#5}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+{\setboolean{COOL@b@islist}{true}}%
+{\setboolean{COOL@b@islist}{false}}%
+\ifthenelse{ \boolean{COOL@q@isint} \AND
+\boolean{COOL@b@islist} \AND
+\NOT \( #3 = \value{COOL@listpointer} \) }%
+{%
+\PackageError{cool}{`Hypergeometric' `q'-arg mismatch with `b'-arg}%
+{`b' list is not the same length as `q'}%
+}%
+{}%
+\ifthenelse{ \boolean{COOL@a@islist} \AND \NOT \boolean{COOL@p@isint} }%
+{%
+\PackageError{cool}{`Hypergeometric' `a'-arg mismatch with `p'-arg}%
+{happens if `a'-arg is a list and `p'-arg isn't an integer}%
+}%
+{}%
+\ifthenelse{ \boolean{COOL@b@islist} \AND \NOT \boolean{COOL@q@isint} }%
+{%
+\PackageError{cool}{`Hypergeometric' `b'-arg mismatch with `q'-arg}%
+{happens if `b'-arg is a list and `q'-arg isn't an integer}%
+}%
+{}%
+{}_{#2}{\COOL@notation@HypergeometricSymb}_{#3}\!%
+\COOL@decide@paren{Hypergeometric}%
+{%
+\COOL@Hypergeometric@pq@ab@value{p}{#2}{a}{#4};%
+\COOL@Hypergeometric@pq@ab@value{q}{#3}{b}{#5};%
+#6%
+}%
+}
+\newcommand{\COOL@notation@RegHypergeometricParen}{p}
+\newcommand{\COOL@notation@RegHypergeometricSymb}{\tilde{F}}
+\newcommand{\RegHypergeometric}[6][\tilde{F}]{%
+\provideboolean{COOL@p@isint}%
+\provideboolean{COOL@q@isint}%
+\provideboolean{COOL@a@islist}%
+\provideboolean{COOL@b@islist}%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+{\setboolean{COOL@p@isint}{true}}%
+{\setboolean{COOL@p@isint}{false}}%
+\isint{#3}%
+\ifthenelse{\boolean{COOL@isint}}%
+{\setboolean{COOL@q@isint}{true}}%
+{\setboolean{COOL@q@isint}{false}}%
+\listval{#4}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+{\setboolean{COOL@a@islist}{true}}%
+{\setboolean{COOL@a@islist}{false}}%
+\ifthenelse{ \boolean{COOL@p@isint} \AND
+\boolean{COOL@a@islist} \AND
+\NOT \( #2 = \value{COOL@listpointer} \) }%
+{%
+\PackageError{cool}%
+{`RegHypergeometric' `p'-arg mismatch with `a'-arg}{}%
+}%
+{}%
+\listval{#5}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+{\setboolean{COOL@b@islist}{true}}%
+{\setboolean{COOL@b@islist}{false}}%
+\ifthenelse{ \boolean{COOL@q@isint} \AND
+\boolean{COOL@b@islist} \AND
+\NOT \( #3 = \value{COOL@listpointer} \) }%
+{%
+\PackageError{cool}%
+{`RegHypergeometric' `q'-arg mismatch with `b'-arg}%
+{`b' list is not the same length as `q'}%
+}%
+{}%
+\ifthenelse{ \boolean{COOL@a@islist} \AND \NOT \boolean{COOL@p@isint} }%
+{%
+\PackageError{cool}%
+{`RegHypergeometric' `a'-arg mismatch with `p'-arg}%
+{happens if `a'-arg is a list and `p'-arg isn't an integer}%
+}%
+{}%
+\ifthenelse{ \boolean{COOL@b@islist} \AND \NOT \boolean{COOL@q@isint} }%
+{%
+\PackageError{cool}%
+{`RegHypergeometric' `b'-arg mismatch with `q'-arg}%
+{happens if `b'-arg is a list and `q'-arg isn't an integer}%
+}%
+{}%
+{}_{#2}{\COOL@notation@RegHypergeometricSymb}_{#3}\!%
+\COOL@decide@paren{RegHypergeometric}%
+{%
+\COOL@Hypergeometric@pq@ab@value{p}{#2}{a}{#4};%
+\COOL@Hypergeometric@pq@ab@value{q}{#3}{b}{#5};%
+#6%
+}%
+}
+\newcommand{\COOL@notation@AppellFOneParen}{p}
+\newcommand{\AppellFOne}[4]%
+{F_{1}\!\COOL@decide@paren{AppellFOne}{#1; #2; #3; #4}}
+\newcommand{\COOL@notation@HypergeometricUSymb}{U}
+\newcommand{\HypergeometricU}[3]%
+{\COOL@notation@HypergeometricUSymb\!\inp{#1, #2, #3}}
+\newcommand{\COOL@MeijerG@anp@value}[3]{%
+\isint{#3}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\forLoop{1}{#3}{COOL@ct}%
+{%
+\ifthenelse{\value{COOL@ct}=1}{}{,}%
+#1_{\arabic{COOL@ct}}%
+}%
+}%
+{%
+#1_1,\ldots,#1_{#2},#1_{#2+1},\dots,#1_{#3}%
+}%
+}%
+{%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\forLoop{1}{#2}{COOL@ct}%
+{%
+\ifthenelse{\value{COOL@ct}=1}{}{,}%
+#1_{\arabic{COOL@ct}}%
+}%
+\setcounter{COOL@ct}{#2}%
+\addtocounter{COOL@ct}{1}%
+,#1_{\arabic{COOL@ct}}, \ldots, #1_{#3}%
+}%
+{%
+#1_1,\ldots,#1_{#2},#1_{#2+1},\dots,#1_{#3}%
+}%
+}%
+}
+\newcommand{\COOL@notation@MeijerGSymb}{G}
+\newcommand{\MeijerG}[6][@,@]{%
+\listval{#1}{0}
+\ifthenelse{\value{COOL@listpointer}>2 \OR \value{COOL@listpointer}<1}%
+{%
+\PackageError{cool}{`MeijerG' Invalid Optional Argument}%
+{Must be a comma separated list of length 1 or 2}%
+}%
+{%
+}%
+\COOL@notation@MeijerGSymb%
+\ifthenelse{\equal{#1}{@,@}}%
+{%
+\listval{#2}{0}% n
+\setcounter{COOL@ct}{\value{COOL@listpointer}}%
+\listval{#4}{0}% m
+\setcounter{COOL@ct@}{\value{COOL@listpointer}}%
+^{\arabic{COOL@ct@},\arabic{COOL@ct}}%
+\listval{#3}{0}% p - n
+\addtocounter{COOL@ct}{\value{COOL@listpointer}}%
+\listval{#5}{0}% q - m
+\addtocounter{COOL@ct@}{\value{COOL@listpointer}}%
+_{\arabic{COOL@ct},\arabic{COOL@ct@}}%
+\!\left(%
+#6%
+\left|%
+{ {#2,#3} \@@atop {#4,#5} }%
+\right)\right.%
+}%
+{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=2}%
+{%
+\provideboolean{COOL@MeijerG@opt@one@blank}%
+\def\COOL@MeijerG@sniffer##1,##2\COOL@MeijerG@sniffer@end{%
+\ifthenelse{\equal{##1}{}}%
+{%
+\setboolean{COOL@MeijerG@opt@one@blank}{true}%
+}%
+{%
+\setboolean{COOL@MeijerG@opt@one@blank}{false}%
+}%
+}%
+\expandafter\COOL@MeijerG@sniffer#1\COOL@MeijerG@sniffer@end\relax%
+\ifthenelse{\boolean{COOL@MeijerG@opt@one@blank}}%
+{%
+\listval{#2}{0}% n
+\setcounter{COOL@ct}{\value{COOL@listpointer}}%
+^{#4,\arabic{COOL@ct}}%
+\listval{#3}{0}% p
+\addtocounter{COOL@ct}{\value{COOL@listpointer}}%
+_{\arabic{COOL@ct},#5}%
+\!\left(%
+#6%
+\left|%
+{%
+{#2,#3} \@@atop {\COOL@MeijerG@anp@value{\listval{#1}{2}}{#4}{#5}}
+}%
+\right)\right.%
+}%
+{%
+^{#4,#2}_{#3,#5}%
+\!\left(%
+#6%
+\left|%
+{%
+{\COOL@MeijerG@anp@value{\listval{#1}{1}}{#2}{#3}}%
+\@@atop%
+{\COOL@MeijerG@anp@value{\listval{#1}{2}}{#4}{#5}}
+}%
+\right)\right.%
+}%
+}%
+{%
+\listval{#4}{0}% m
+\setcounter{COOL@ct}{\value{COOL@listpointer}}%
+^{\arabic{COOL@ct}, #2}%
+\listval{#5}{0}% q
+\addtocounter{COOL@ct}{\value{COOL@listpointer}}%
+_{#3, \arabic{COOL@ct}}%
+\!\left(%
+#6%
+\left|%
+{%
+{\COOL@MeijerG@anp@value{#1}{#2}{#3}} \@@atop {#4,#5}
+}%
+\right)\right.%
+}%
+}%
+}%
+\newcommand{\ClebschGordon}[3]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+{%
+\PackageError{cool}{`ClebschGordon' Invalid Argument}%
+{Must have a comma separated list of length two}%
+}%
+{}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+{%
+\PackageError{cool}{`ClebschGordon' Invalid Argument}%
+{Must have a comma separated list of length two}%
+}%
+{}%
+\listval{#3}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+{%
+\PackageError{cool}{`ClebschGordon' Invalid Argument}%
+{Must have a comma separated list of length two}%
+}%
+{}%
+\left<%
+\listval{#1}{1},\listval{#2}{1};%
+\listval{#1}{2},\listval{#2}{2}%
+\left|%
+\listval{#1}{1},\listval{#2}{1};%
+\listval{#3}{1},\listval{#3}{2}%
+\right>\right.%
+}
+\newcommand{\ThreeJSymbol}[3]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+{%
+\PackageError{cool}{`ThreeJSymbol' Invalid Argument}%
+{Must have comma separated list of length 2}%
+}%
+{}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+{%
+\PackageError{cool}{`ThreeJSymbol' Invalid Argument}%
+{Must have comma separated list of length 2}%
+}%
+{}%
+\listval{#3}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+{%
+\PackageError{cool}{`ThreeJSymbol' Invalid Argument}%
+{Must have comma separated list of length 2}%
+}%
+{}%
+\mathchoice{%
+\inp{\!%
+\begin{array}{ccc}%
+\listval{#1}{1} & \listval{#2}{1} & \listval{#3}{1} \\%
+\listval{#1}{2} & \listval{#2}{2} & \listval{#3}{2}
+\end{array}%
+ \!}%
+ }%
+ {%
+\inp{\!%
+{\listval{#1}{1} \@@atop \listval{#1}{2}}%
+{\listval{#2}{1} \@@atop \listval{#2}{2}}%
+{\listval{#3}{1} \@@atop \listval{#3}{2}}%
+ \!}%
+ }%
+ {%
+\inp{\!%
+{\listval{#1}{1} \@@atop \listval{#1}{2}}%
+{\listval{#2}{1} \@@atop \listval{#2}{2}}%
+{\listval{#3}{1} \@@atop \listval{#3}{2}}%
+ \!}%
+ }%
+ {%
+\inp{\!%
+{\listval{#1}{1} \@@atop \listval{#1}{2}}%
+{\listval{#2}{1} \@@atop \listval{#2}{2}}%
+{\listval{#3}{1} \@@atop \listval{#3}{2}}%
+ \!}%
+ }%
+}
+\newcommand{\SixJSymbol}[2]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=3}%
+{%
+\PackageError{cool}{`SixJSymbol' Invalid Argument}%
+{Must have a comma separated list of length 3}%
+}%
+{}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=3}%
+{%
+\PackageError{cool}{`SixJSymbol' Invalid Argument}%
+{Must have a comma separated list of length 3}%
+}%
+{}%
+\mathchoice{%
+\inbr{\!%
+\begin{array}{ccc}%
+\listval{#1}{1} & \listval{#1}{2} & \listval{#1}{3} \\%
+\listval{#2}{1} & \listval{#2}{2} & \listval{#2}{3}%
+\end{array}%
+ \!}%
+ }%
+ {%
+\inbr{\!%
+{\listval{#1}{1} \@@atop \listval{#2}{1}}%
+{\listval{#1}{2} \@@atop \listval{#2}{2}}%
+{\listval{#1}{3} \@@atop \listval{#2}{3}}%
+ \!}%
+ }%
+ {%
+\inbr{\!%
+{\listval{#1}{1} \@@atop \listval{#2}{1}}%
+{\listval{#1}{2} \@@atop \listval{#2}{2}}%
+{\listval{#1}{3} \@@atop \listval{#2}{3}}%
+ \!}%
+ }%
+ {%
+\inbr{\!%
+{\listval{#1}{1} \@@atop \listval{#2}{1}}%
+{\listval{#1}{2} \@@atop \listval{#2}{2}}%
+{\listval{#1}{3} \@@atop \listval{#2}{3}}%
+ \!}%
+ }%
+}
+\newcommand{\COOL@notation@EllipticKParen}{p}
+\newcommand{\COOL@notation@EllipticKSymb}{K}
+\newcommand{\EllipticK}[1]%
+{\COOL@notation@EllipticKSymb\!\COOL@decide@paren{EllipticK}{#1}}%
+\newcommand{\COOL@notation@EllipticEParen}{p}
+\newcommand{\COOL@notation@EllipticESymb}{E}
+\newcommand{\EllipticE}[1]{%
+\liststore{#1}{COOL@EllipticE@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\COOL@notation@EllipticESymb\!\COOL@decide@paren{EllipticE}{#1}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\COOL@notation@EllipticESymb\!%
+\COOL@decide@paren{EllipticE}%
+{\COOL@EllipticE@arg@i \left| \, \COOL@EllipticE@arg@ii \!\!\right.}%
+}%
+{%
+\PackageError{Invalid Argument}%
+{`EllipticE' can only accept a comma separated list of length 1 or 2}%
+}%
+}%
+}
+\newcommand{\COOL@notation@EllipticPiParen}{p}
+\newcommand{\COOL@notation@EllipticPiSymb}{\Pi}
+\newcommand{\EllipticPi}[1]{%
+\liststore{#1}{COOL@EllipticPi@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\COOL@notation@EllipticPiSymb%
+\!\COOL@decide@paren{EllipticPi}%
+{\COOL@EllipticPi@arg@i \left| \, \COOL@EllipticPi@arg@ii \!\!\right.}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+\COOL@notation@EllipticPiSymb%
+\!\COOL@decide@paren{EllipticPi}%
+{ \COOL@EllipticPi@arg@i; \,%
+\COOL@EllipticPi@arg@ii \left| \,%
+\COOL@EllipticPi@arg@iii \!\!\right.%
+}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`EllipticPi' can only accept a comma separated list of length 2 or 3}%
+}%
+}%
+}
+\newcommand{\COOL@notation@EllipticFParen}{p}
+\newcommand{\COOL@notation@EllipticFSymb}{F}
+\newcommand{\EllipticF}[1]{%
+\liststore{#1}{COOL@EllipticF@arg@}%
+\listval{#1}{0}%
+\ifthenelse{ \value{COOL@listpointer} = 2 }%
+{%
+\COOL@notation@EllipticFSymb%
+\!\COOL@decide@paren{EllipticF}%
+{\COOL@EllipticF@arg@i \left| \, \COOL@EllipticF@arg@ii \!\!\right.}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`EllipticF' can only accept a comma separated list of length 2}%
+}%
+}
+\newcommand{\IncEllipticF}[2]{\EllipticF{#1,#2}}
+\newcommand{\IncEllipticE}[2]{\EllipticE{#1,#2}}
+\newcommand{\IncEllipticPi}[3]{\EllipticPi{#1,#2,#3}}
+\newcommand{\COOL@notation@JacobiZetaParen}{p}
+\newcommand{\COOL@notation@JacobiZetaSymb}{Z}
+\newcommand{\JacobiZeta}[2]{%
+\COOL@notation@JacobiZetaSymb
+\!\COOL@decide@paren{JacobiZeta}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@EllipticThetaParen}{p}
+\newcommand{\EllipticTheta}[3]%
+{\vartheta_{#1}\!\COOL@decide@paren{EllipticTheta}{#2, #3}}
+\newcommand{\JacobiTheta}[3]{\EllipticTheta{#1}{#2}{#3}}
+\newcommand{\COOL@notation@NevilleThetaCParen}{p}
+\newcommand{\NevilleThetaC}[2]{%
+\vartheta_{c}\!\COOL@decide@paren{NevilleThetaC}%
+{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@NevilleThetaDParen}{p}
+\newcommand{\NevilleThetaD}[2]{%
+\vartheta_{d}\!\COOL@decide@paren{NevilleThetaD}%
+{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@NevilleThetaNParen}{p}
+\newcommand{\NevilleThetaN}[2]{%
+\vartheta_{n}\!\COOL@decide@paren{NevilleThetaN}%
+{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@NevilleThetaSParen}{p}
+\newcommand{\NevilleThetaS}[2]{%
+\vartheta_{s}\!\COOL@decide@paren{NevilleThetaS}%
+{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@WeierstrassPParen}{p}
+\newcommand{\WeierstrassP}[2]{%
+\liststore{#2}{COOL@WeiP@arg@g@}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassP' second argument must be%
+ a comma separated list of length 2}%
+}
+{%
+\wp\!\COOL@decide@paren{WeierstrassP}{#1; #2}
+}%
+}
+\newcommand{\WeiP}[2]{\WeierstrassP{#1}{#2}}
+\newcommand{\COOL@notation@WeierstrassPInvParen}{p}
+\newcommand{\WeierstrassPInv}[2]{%
+\liststore{#1}{COOL@WeiPinv@arg@z@}%
+\liststore{#1}{COOL@WeiPinv@arg@g@}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassPInv' second argument must be%
+ a comma separated list of length 2}%
+}
+{
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\wp^{-1}\!\COOL@decide@paren{WeierstrassPInv}{#1; #2}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\wp^{-1}\!\COOL@decide@paren{WeierstrassPInv}{#1; #2}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassPInv' first argument must be%
+ a comma separate list of length 1 or 2}%
+}}%
+}%
+}
+\newcommand{\WeiPInv}[2]{\WeierstrassPInv{#1}{#2}}
+\newcommand{\WeierstrassPGenInv}[4]{\WeierstrassPInv{#1,#2}{#3,#4}}
+\newcommand{\WeierstrassSigma}[2]{%
+\liststore{#1}{COOL@WeiSigma@arg@z@}%
+\liststore{#2}{COOL@WeiSigma@arg@g@}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassSigma' second argument must be%
+ a comma separated list of length 2}%
+}%
+{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\sigma\!\inp{#1; #2}%
+}%
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\sigma_{\COOL@WeiSigma@arg@z@i}\!\inp{\COOL@WeiSigma@arg@z@ii; #2}%
+}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassSigma' first argument must be%
+ a comma separated list of length 1 or 2}%
+}}%
+}%
+}
+\newcommand{\WeiSigma}[2]{\WeierstrassSigma{#1}{#2}}
+\newcommand{\AssocWeierstrassSigma}[4]{\WeierstrassSigma{#1,#2}{#3,#4}}
+\newcommand{\COOL@notation@WeierstrassZetaParen}{p}%
+\newcommand{\WeierstrassZeta}[2]{%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassZeta' second argument must be%
+ a comma separated list of length 2}%
+}%
+{%
+\zeta\!\COOL@decide@paren{WeierstrassZeta}{#1; #2}%
+}%
+}
+\newcommand{\WeiZeta}[2]{\WeierstrassZeta{#1}{#2}}
+\newcommand{\WeierstrassHalfPeriods}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassHalfPeriods' can only accept%
+ a comma separated list of length 2}%
+}%
+{%
+\{ \omega_1\!\inp{#1}, \omega_3\!\inp{#1} \}%
+}%
+}
+\newcommand{\WeiHalfPeriods}[1]{\WeierstrassHalfPeriods{#1}}
+\newcommand{\WeierstrassInvariants}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassInvariants' can only accept%
+ a comma separated list of length 2}%
+}%
+{%
+\{ g_2\!\inp{#1}, g_3\!\inp{#1} \}%
+}%
+}
+\newcommand{\WeiInvars}[1]{\WeierstrassInvariants{#1}}
+\newcommand{\COOL@hideOnSF}[2]
+{%
+\ifthenelse{ \equal{\csname COOL@notation@#1\endcsname}{sf} }%
+{}%
+{#2}%
+}
+\newcommand{\COOL@notation@WeierstrassPHalfPeriodValuesDisplay}{sf}
+\newcommand{\WeierstrassPHalfPeriodValues}[1]
+{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassPHalfPeriodValues' can only accept%
+ a comma separated list of length 2}%
+}%
+{%
+\{ e_1\COOL@hideOnSF{WeierstrassPHalfPeriodValuesDisplay}{\!\inp{#1}},%
+e_2\COOL@hideOnSF{WeierstrassPHalfPeriodValuesDisplay}{\!\inp{#1}},%
+e_3\COOL@hideOnSF{WeierstrassPHalfPeriodValuesDisplay}{\!\inp{#1}}%
+\}%
+}%
+}
+\newcommand{\WeiPHalfPeriodVal}[1]{\WeierstrassPHalfPeriodValues{#1}}
+\newcommand{\COOL@notation@WeierstrassZetaHalfPeriodValuesDisplay}{sf}
+\newcommand{\WeierstrassZetaHalfPeriodValues}[1]
+{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`WeierstrassZetaHalfPeriodValues' can only accept%
+ a comma separated list of length 2}%
+}%
+{%
+\{%
+\eta_1\COOL@hideOnSF%
+{WeierstrassZetaHalfPeriodValuesDisplay}{\!\inp{#1}},%
+\eta_2\COOL@hideOnSF%
+{WeierstrassZetaHalfPeriodValuesDisplay}{\!\inp{#1}},%
+\eta_3\COOL@hideOnSF%
+{WeierstrassZetaHalfPeriodValuesDisplay}{\!\inp{#1}}%
+\}%
+}%
+}
+\newcommand{\WeiZetaHalfPeriodVal}[1]%
+{\WeierstrassZetaHalfPeriodValues{#1}}
+\newcommand{\COOL@notation@JacobiAmplitudeParen}{p}
+\DeclareMathOperator{\JacobiAmplitudeSymb}{am}
+\newcommand{\JacobiAmplitude}[2]{%
+\JacobiAmplitudeSymb\!\COOL@decide@paren%
+{JacobiAmplitude}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiCDParen}{p}
+\newcommand{\COOL@notation@JacobiCDInvParen}{p}
+\DeclareMathOperator{\JacobiCDSymb}{cd}
+\newcommand{\JacobiCD}[2]{%
+\JacobiCDSymb\!\COOL@decide@paren%
+{JacobiCD}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiCDInv}[2]{%
+\JacobiCDSymb^{-1}\!\COOL@decide@paren%
+{JacobiCDInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiCNParen}{p}
+\newcommand{\COOL@notation@JacobiCNInvParen}{p}
+\DeclareMathOperator{\JacobiCNSymb}{cn}
+\newcommand{\JacobiCN}[2]{%
+\JacobiCNSymb\!\COOL@decide@paren%
+{JacobiCN}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiCNInv}[2]{%
+\JacobiCNSymb^{-1}\!\COOL@decide@paren%
+{JacobiCNInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiCSParen}{p}
+\newcommand{\COOL@notation@JacobiCSInvParen}{p}
+\DeclareMathOperator{\JacobiCSSymb}{cs}
+\newcommand{\JacobiCS}[2]{%
+\JacobiCSSymb\!\COOL@decide@paren%
+{JacobiCS}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiCSInv}[2]{%
+\JacobiCSSymb^{-1}\!\COOL@decide@paren%
+{JacobiCSInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiDCParen}{p}
+\newcommand{\COOL@notation@JacobiDCInvParen}{p}
+\DeclareMathOperator{\JacobiDCSymb}{dc}
+\newcommand{\JacobiDC}[2]{%
+\JacobiDCSymb\!\COOL@decide@paren%
+{JacobiDC}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiDCInv}[2]{%
+\JacobiDCSymb^{-1}\!\COOL@decide@paren%
+{JacobiDCInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiDNParen}{p}
+\newcommand{\COOL@notation@JacobiDNInvParen}{p}
+\DeclareMathOperator{\JacobiDNSymb}{dn}
+\newcommand{\JacobiDN}[2]{%
+\JacobiDNSymb\!\COOL@decide@paren%
+{JacobiDN}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiDNInv}[2]{%
+\JacobiDNSymb^{-1}\!\COOL@decide@paren%
+{JacobiDNInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiDSParen}{p}
+\newcommand{\COOL@notation@JacobiDSInvParen}{p}
+\DeclareMathOperator{\JacobiDSSymb}{ds}
+\newcommand{\JacobiDS}[2]{%
+\JacobiDSSymb\!\COOL@decide@paren%
+{JacobiDS}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiDSInv}[2]{%
+\JacobiDSSymb^{-1}\!\COOL@decide@paren%
+{JacobiDSInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiNCParen}{p}
+\newcommand{\COOL@notation@JacobiNCInvParen}{p}
+\DeclareMathOperator{\JacobiNCSymb}{nc}
+\newcommand{\JacobiNC}[2]{%
+\JacobiNCSymb\!\COOL@decide@paren%
+{JacobiNC}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiNCInv}[2]{%
+\JacobiNCSymb^{-1}\!\COOL@decide@paren%
+{JacobiNCInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiNDParen}{p}
+\newcommand{\COOL@notation@JacobiNDInvParen}{p}
+\DeclareMathOperator{\JacobiNDSymb}{nd}
+\newcommand{\JacobiND}[2]{%
+\JacobiNDSymb\!\COOL@decide@paren%
+{JacobiND}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiNDInv}[2]{%
+\JacobiNDSymb^{-1}\!\COOL@decide@paren%
+{JacobiNDInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiNSParen}{p}
+\newcommand{\COOL@notation@JacobiNSInvParen}{p}
+\DeclareMathOperator{\JacobiNSSymb}{ns}
+\newcommand{\JacobiNS}[2]{%
+\JacobiNSSymb\!\COOL@decide@paren%
+{JacobiNS}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiNSInv}[2]{%
+\JacobiNSSymb^{-1}\!\COOL@decide@paren%
+{JacobiNSInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiSCParen}{p}
+\newcommand{\COOL@notation@JacobiSCInvParen}{p}
+\DeclareMathOperator{\JacobiSCSymb}{sc}
+\newcommand{\JacobiSC}[2]{%
+\JacobiSCSymb\!\COOL@decide@paren%
+{JacobiSC}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiSCInv}[2]{%
+\JacobiSCSymb^{-1}\!\COOL@decide@paren%
+{JacobiSCInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiSDParen}{p}
+\newcommand{\COOL@notation@JacobiSDInvParen}{p}
+\DeclareMathOperator{\JacobiSDSymb}{sd}
+\newcommand{\JacobiSD}[2]{%
+\JacobiSDSymb\!\COOL@decide@paren%
+{JacobiSD}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiSDInv}[2]{%
+\JacobiSDSymb^{-1}\!\COOL@decide@paren%
+{JacobiSDInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@JacobiSNParen}{p}
+\newcommand{\COOL@notation@JacobiSNInvParen}{p}
+\DeclareMathOperator{\JacobiSNSymb}{sn}
+\newcommand{\JacobiSN}[2]{%
+\JacobiSNSymb\!\COOL@decide@paren%
+{JacobiSN}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiSNInv}[2]{%
+\JacobiSNSymb^{-1}\!\COOL@decide@paren%
+{JacobiSNInv}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\COOL@notation@DedekindEtaParen}{p}
+\newcommand{\DedekindEta}[1]{\eta\!\COOL@decide@paren{DedekindEta}{#1}}
+\newcommand{\COOL@notation@KleinInvariantJParen}{p}
+\newcommand{\KleinInvariantJ}[1]%
+{J\!\COOL@decide@paren{KleinInvariantJ}{#1}}
+\newcommand{\COOL@notation@ModularLambdaParen}{p}
+\newcommand{\ModularLambda}[1]%
+{\lambda\!\COOL@decide@paren{ModularLambda}{#1}}
+\newcommand{\COOL@notation@EllipticNomeQParen}{p}
+\newcommand{\COOL@notation@EllipticNomeQInvParen}{p}
+\newcommand{\EllipticNomeQ}[1]%
+{q\!\COOL@decide@paren{EllipticNomeQ}{#1}}
+\newcommand{\EllipticNomeQInv}[1]%
+{q^{-1}\!\COOL@decide@paren{EllipticNomeQ}{#1}}
+\newcommand{\COOL@notation@ArithGeoMeanParen}{p}
+\DeclareMathOperator{\ArithGeoMeanSymb}{agm}
+\newcommand{\ArithGeoMean}[2]%
+{\ArithGeoMeanSymb\!\COOL@decide@paren{ArithGeoMean}{#1, #2}}
+\newcommand{\AGM}[2]{\ArithGeoMean{#1}{#2}}
+\newcommand{\COOL@notation@EllipticExpParen}{p}
+\DeclareMathOperator{\EllipticExpSymb}{eexp}
+\newcommand{\EllipticExp}[2]{%
+\liststore{#2}{COOL@EllipticExp@arg@}
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`EllipticExp' second argument must be
+ a comma separated list of length 2}%
+}%
+{%
+\EllipticExpSymb\!\COOL@decide@paren{EllipticExp}{#1; #2}%
+}%
+}
+\newcommand{\EExp}[2]{\EllipticExp{#1}{#2}}
+\newcommand{\COOL@notation@EllipticLogParen}{p}
+\DeclareMathOperator{\EllipticLogSymb}{elog}
+\newcommand{\EllipticLog}[2]{%
+\liststore{#1}{COOL@EllipticLog@arg@z@}%
+\liststore{#2}{COOL@EllipticLog@arg@a@}%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`EllipticLog' first argument must be
+ a comma separated list of length 2}%
+}%
+{%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+{%
+\PackageError{cool}{Invalid Argument}%
+{`EllipticLog' second argument must be%
+ a comma separated list of length 2}%
+}%
+{%
+\EllipticLogSymb\!\COOL@decide@paren{EllipticLog}{#1; #2}%
+}%
+}%
+}
+\newcommand{\ELog}[2]{\EllipticLog{#1}{#2}}
+\newcommand{\RiemannZeta}[1]{\Zeta{#1}}
+\newcommand{\HurwitzZeta}[2]{\Zeta{#1,#2}}
+\newcommand{\COOL@notation@ZetaParen}{p}
+\newcommand{\Zeta}[1]{%
+\liststore{#1}{COOL@Zeta@arg@}%
+\listval{#1}{0}% get the list length
+\ifthenelse{\value{COOL@listpointer} = 2}%
+{%
+\zeta\!\COOL@decide@paren{Zeta}{\COOL@Zeta@arg@i,\COOL@Zeta@arg@ii}%
+}%
+{%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+{%
+\zeta\!\COOL@decide@paren{Zeta}{#1}%
+}%
+{%
+\PackageError{cool}{`Zeta' Invalid Argument}%
+{the Zeta function can only accept%
+ a comma deliminated list of length 1 or 2}
+}%
+}%
+}%
+\newcommand{\COOL@notation@RiemannSiegelThetaParen}{p}
+\newcommand{\RiemannSiegelTheta}[1]%
+{\vartheta\!\COOL@decide@paren{RiemannSiegelTheta}{#1}}
+\newcommand{\COOL@notation@RiemannSiegelZParen}{p}
+\newcommand{\RiemannSiegelZ}[1]%
+{Z\!\COOL@decide@paren{RiemannSiegelZ}{#1}}
+\newcommand{\StieltjesGamma}[1]{\gamma_{#1}}
+\newcommand{\COOL@notation@LerchPhiParen}{p}
+\newcommand{\LerchPhi}[3]{\Phi\!\COOL@decide@paren{LerchPhi}{#1,#2,#3}}
+\newcommand{\COOL@notation@NielsenPolyLogParen}{p}
+\newcommand{%
+\NielsenPolyLog}[3]{S_{#1}^{#2}\!%
+\COOL@decide@paren{NielsenPolyLog}{#3}%
+}
+\newcommand{\COOL@notation@PolyLogParen}{p}
+\DeclareMathOperator{\PolyLogSymb}{Li}
+\newcommand{\PolyLog}[1]{%
+\liststore{#1}{COOL@PolyLog@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 3}%
+{%
+\NielsenPolyLog{\COOL@PolyLog@arg@i}%
+{\COOL@PolyLog@arg@ii}{\COOL@PolyLog@arg@iii}%
+}%
+{%
+\ifthenelse{ \value{COOL@listpointer} = 2 }%
+{%
+\PolyLogSymb_{\COOL@PolyLog@arg@i}\!%
+\COOL@decide@paren{PolyLog}{\COOL@PolyLog@arg@ii}%
+}%
+{%
+\PackageError{cool}{`PolyLog' Invalid Argument}%
+{This function returns either the Polylogarithm or the%
+ Nielsen Polylogarithm. It therefore only accepts a comma%
+ deliminated list of length two or three (1 or 2 commas)}%
+}%
+}%
+}
+\newcommand{\DiLog}[1]{\PolyLog{2,#1}}
+\newcommand{\COOL@notation@MathieuCParen}{p}
+\DeclareMathOperator{\MathieuCSymb}{Ce}
+\newcommand{\MathieuC}[3]%
+{\MathieuCSymb\!\COOL@decide@paren{MathieuC}{#1,#2,#3}}
+\newcommand{\COOL@notation@MathieuSParen}{p}
+\DeclareMathOperator{\MathieuSSymb}{Se}
+\newcommand{\MathieuS}[3]%
+{\mathord{\MathieuSSymb}\!\COOL@decide@paren{MathieuS}{#1,#2,#3}}
+\newcommand{\COOL@notation@MathieuCharacteristicAParen}{p}
+\newcommand{\MathieuCharacteristicA}[2]%
+{a_{#1}\!\COOL@decide@paren{MathieuCharacteristicA}{#2}}
+\newcommand{\MathieuCharisticA}[2]{\MathieuCharacteristicA{#1}{#2}}
+\newcommand{\COOL@notation@MathieuCharacteristicBParen}{p}
+\newcommand{\MathieuCharacteristicB}[2]%
+{b_{#1}\!\COOL@decide@paren{MathieuCharacteristicB}{#2}}
+\newcommand{\MathieuCharisticB}[2]{\MathieuCharacteristicB{#1}{#2}}
+\newcommand{\COOL@notation@MathieuCharacteristicExponentParen}{p}
+\newcommand{\MathieuCharacteristicExponent}[2]%
+{r\!\COOL@decide@paren{MathieuCharacteristicExponent}{#1,#2}}
+\newcommand{\MathieuCharisticExp}[2]%
+{\MathieuCharacteristicExponent{#1}{#2}}
+\newcommand{\Abs}[1]{ \left|#1\right| }
+\newcommand{\Arg}[1]{ \arg\!\inp{#1} }
+\def\COOL@notation@Conjugate{star}
+\newcommand{\COOL@notation@ConjugateParen}{inv}
+\newcommand{\Conjugate}[1]{\Conj{#1}}
+\newcommand{\Conj}[1]{%
+\ifthenelse{\equal{\COOL@notation@Conjugate}{bar}}%
+{%
+\bar{#1}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@Conjugate}{overline}}%
+{%
+\overline{#1}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@Conjugate}{star}}%
+{%
+\COOL@decide@paren{Conjugate}{#1}^*%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{`Conjugate' can only be set at `star', `bar', or `overline'}%
+}%
+}}%
+}
+\newcommand{\COOL@notation@RealParen}{none}
+\DeclareMathOperator{\RealSymb}{Re}
+\newcommand{\Real}[1]{%
+\ifthenelse{\equal{\COOL@notation@ImagParen}{none}}%
+{%
+\RealSymb{#1}%
+}%
+{%
+\RealSymb\!\COOL@decide@paren{Imag}{#1}%
+}%
+}
+\newcommand{\COOL@notation@ImagParen}{none}
+\DeclareMathOperator{\ImagSymb}{Im}
+\newcommand{\Imag}[1]{%
+\ifthenelse{\equal{\COOL@notation@ImagParen}{none}}%
+{%
+\ImagSymb{#1}%
+}%
+{%
+\ImagSymb\!\COOL@decide@paren{Imag}{#1}%
+}%
+}
+\newcommand{\COOL@notation@SignParen}{p}
+\newcommand{\Sign}[1]{\operatorname{sgn}\!\COOL@decide@paren{Sign}{#1}}
+\newcommand{\COOL@notation@FactorIntegerParen}{p}
+\DeclareMathOperator{\FactorIntegerSymb}{factors}
+\newcommand{\FactorInteger}[1]%
+{\FactorIntegerSymb\!\COOL@decide@paren{FactorInteger}{#1}}
+\newcommand{\Factors}[1]{\FactorInteger{#1}}
+\newcommand{\COOL@notation@DivisorsParen}{p}
+\DeclareMathOperator{\DivisorsSymb}{divisors}
+\newcommand{\Divisors}[1]%
+{\mathord{\DivisorsSymb}\!\COOL@decide@paren{Divisors}{#1}}
+\newcommand{\COOL@notation@PrimeParen}{p}
+\DeclareMathOperator{\PrimeSymb}{prime}
+\newcommand{\Prime}[1]%
+{\mathord{\PrimeSymb}\!\COOL@decide@paren{Prime}{#1}}
+\newcommand{\COOL@notation@PrimePiParen}{p}
+\newcommand{\PrimePi}[1]{\pi\!\COOL@decide@paren{PrimePi}{#1}}
+\newcommand{\COOL@notation@DivisorSigmaParen}{p}
+\newcommand{\DivisorSigma}[2]%
+{\sigma_{#1}\!\COOL@decide@paren{DivisorSigma}{#2}}
+\newcommand{\COOL@notation@EulerPhiParen}{p}
+\newcommand{\EulerPhi}[1]{\varphi\!\COOL@decide@paren{EulerPhi}{#1}}
+\newcommand{\COOL@notation@MoebiusMuParen}{p}
+\newcommand{\MoebiusMu}[1]{\mu\!\COOL@decide@paren{MoebiusMu}{#1}}
+\newcommand{\JacobiSymbol}[2]{\inp{\frac{#1}{#2}}}
+\newcommand{\COOL@notation@CarmichaelLambdaParen}{p}
+\newcommand{\CarmichaelLambda}[1]%
+{\lambda\!\COOL@decide@paren{CarmichaelLambda}{#1}}
+\newcommand{\DigitCount}[2]{%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\{%
+\setcounter{COOL@ct@}{#2}%
+\addtocounter{COOL@ct@}{-1}%
+\forLoop{1}{\arabic{COOL@ct@}}{COOL@ct}%
+{%
+s^{\arabic{COOL@ct}}_{#2}\!\inp{#1},
+}%
+s^{\inp{0}}_{#2}\!\inp{#1}%
+\}%
+}%
+{%
+\{%
+s^{\inp{1}}_{#2}\!\inp{#1},%
+s^{\inp{2}}_{#2}\!\inp{#1},%
+\ldots,%
+s^{\inp{#2} - 1}_{#2}\!\inp{#1},%
+s^{\inp{0}}_{#2}\!\inp{#1}%
+\}%
+}%
+}
+\newcommand{\COOL@notation@DiracDeltaParen}{p}
+\newcommand{\DiracDelta}[1]{\delta\!\COOL@decide@paren{DiracDelta}{#1}}
+\newcommand{\COOL@notation@HeavisideStepParen}{p}
+\newcommand{\HeavisideStep}[1]%
+{\theta\!\COOL@decide@paren{HeavisideStep}{#1}}
+\newcommand{\UnitStep}[1]{\HeavisideStep{#1}}
+\newcounter{COOL@multideriv}
+\newcommand{\COOL@notation@DDisplayFunc}{inset}
+\newcommand{\COOL@notation@DShorten}{true}
+\newcommand{\COOL@derivative}[4]{%
+\listval{#3}{0}%
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}%
+\liststore{#3}{COOL@deriv@wrt@}%
+\listval{#1}{0}%
+\setcounter{COOL@ct}{\value{COOL@listpointer}}%
+\ifthenelse{\value{COOL@ct}>\value{COOL@listlen}}%
+{\setcounter{COOL@ct}{\value{COOL@listlen}}}{}%
+\liststore{#1}{COOL@deriv@powers@}%
+\isint{\COOL@deriv@powers@i}%
+\setcounter{COOL@multideriv}{2}%
+\whiledo{ \boolean{COOL@isint} \AND
+\NOT \value{COOL@multideriv}>\value{COOL@ct} }%
+{%
+\def\COOL@tempd%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\isint{\COOL@tempd}%
+\stepcounter{COOL@multideriv}%
+}%
+\ifthenelse{ \equal{\COOL@notation@DShorten}{true} \AND
+\equal{\COOL@notation@DDisplayFunc}{inset} }%
+{%
+\ifthenelse{ \boolean{COOL@isint} }%
+{%
+\def\COOL@temp@D@bot{}%
+\setcounter{COOL@ct@}{0}%
+\forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\addtocounter{COOL@ct@}{\COOL@power@temp}%
+\ifthenelse{ \value{COOL@multideriv}=1 }{}%
+{\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+\ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\stepcounter{COOL@ct}%
+\forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+{%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\addtocounter{COOL@ct@}{\COOL@power@temp}%
+\ifthenelse{ \value{COOL@multideriv}=1 }{}%
+{\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+}%
+{}%
+\ifthenelse{\value{COOL@ct@}=1}%
+{%
+\frac{#4 #2}{\COOL@temp@D@bot}%
+}%
+{%
+\frac{#4^{\arabic{COOL@ct@}} #2}{\COOL@temp@D@bot}%
+}%
+}%
+{%
+\edef\COOL@temp@D@bot{}%
+\def\COOL@temp@D@top@power{}%
+\forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \value{COOL@multideriv} = 1}%
+{%
+\edef\COOL@temp@D@top@power{\COOL@power@temp}%
+}%
+{%
+\edef\COOL@temp@D@top@power%
+{\COOL@temp@D@top@power + \COOL@power@temp}%
+\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+\ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\stepcounter{COOL@ct}%
+\forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+{%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \value{COOL@multideriv} = 1}%
+{%
+\edef\COOL@temp@D@top@power{\COOL@power@temp}%
+}%
+{%
+\edef\COOL@temp@D@top@power%
+{\COOL@temp@D@top@power + \COOL@power@temp}%
+\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+}%
+{}%
+\frac{#4^{\COOL@temp@D@top@power} #2}{\COOL@temp@D@bot}%
+}%
+}%
+{ \ifthenelse{ \equal{\COOL@notation@DShorten}{true} \AND
+\equal{\COOL@notation@DDisplayFunc}{outset} }%
+{%
+\ifthenelse{ \boolean{COOL@isint} }%
+{%
+\def\COOL@temp@D@bot{}%
+\setcounter{COOL@ct@}{0}%
+\forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\addtocounter{COOL@ct@}{\COOL@power@temp}%
+\ifthenelse{ \value{COOL@multideriv}=1 }{}%
+{\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+\ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\stepcounter{COOL@ct}%
+\forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+{%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\addtocounter{COOL@ct@}{\COOL@power@temp}%
+\ifthenelse{ \value{COOL@multideriv}=1 }{}%
+{\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+}%
+{}%
+\ifthenelse{\value{COOL@ct@}=1}%
+{%
+\frac{#4}{\COOL@temp@D@bot} #2%
+}%
+{%
+\frac{#4^{\arabic{COOL@ct@}}}{\COOL@temp@D@bot} #2%
+}%
+}%
+{%
+\edef\COOL@temp@D@bot{}%
+\def\COOL@temp@D@top@power{}%
+\forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \value{COOL@multideriv} = 1}%
+{%
+\edef\COOL@temp@D@top@power{\COOL@power@temp}%
+}%
+{%
+\edef\COOL@temp@D@top@power%
+{\COOL@temp@D@top@power + \COOL@power@temp}%
+\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+\ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\stepcounter{COOL@ct}%
+\forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+{%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \value{COOL@multideriv} = 1}%
+{%
+\edef\COOL@temp@D@top@power{\COOL@power@temp}%
+}%
+{%
+\edef\COOL@temp@D@top@power%
+{\COOL@temp@D@top@power + \COOL@power@temp}%
+\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@bot%
+{\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+}%
+}%
+{}%
+\frac{#4^{\COOL@temp@D@top@power} }{\COOL@temp@D@bot} #2%
+}%
+}%
+{ \ifthenelse{ \equal{\COOL@notation@DShorten}{false} \AND
+\equal{\COOL@notation@DDisplayFunc}{inset} }%
+{%
+\def\COOL@temp@D@result{}%
+\def\COOL@temp@D@bot{}%
+\def\COOL@temp@D@top{}%
+\setcounter{COOL@ct@}{\value{COOL@ct}}%
+\addtocounter{COOL@ct@}{-1}
+\forLoop{1}{\value{COOL@ct@}}{COOL@multideriv}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+}%
+\ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@ct}\endcsname}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+\stepcounter{COOL@ct}%
+\setcounter{COOL@ct@}{\value{COOL@listlen}}%
+\addtocounter{COOL@ct@}{-1}%
+\forLoop{\value{COOL@ct}}{\value{COOL@ct@}}{COOL@multideriv}%
+{%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@listlen}\endcsname}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top #2}{\COOL@temp@D@bot}}%
+}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@ct}\endcsname}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top #2}{\COOL@temp@D@bot}}%
+}%
+\COOL@temp@D@result%
+}%
+{ \ifthenelse{ \equal{\COOL@notation@DShorten}{false} \AND
+\equal{\COOL@notation@DDisplayFunc}{outset} }%
+{%
+\def\COOL@temp@D@result{}%
+\def\COOL@temp@D@bot{}%
+\def\COOL@temp@D@top{}%
+\forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+}%
+\ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+{%
+\edef\COOL@power@temp%
+{\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+\stepcounter{COOL@ct}%
+\forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+{%
+\edef\COOL@wrt@temp%
+{\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+\ifthenelse{ \equal{\COOL@power@temp}{1} }%
+{%
+\edef\COOL@temp@D@top{#4}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+}%
+{%
+\edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+\edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+}%
+\edef\COOL@temp@D@result%
+{\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+}%
+}%
+{%
+}%
+\COOL@temp@D@result #2
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{DShorten can only be `true' or `false';%
+ DDisplayFunc can only be `inset' or `outset'}%
+}%
+}}}%
+}
+\newcommand{\D}[3][1]{\COOL@derivative{#1}{#2}{#3}{d}}
+\newcommand{\pderiv}[3][1]{\COOL@derivative{#1}{#2}{#3}{\partial}}
+\newcommand{\COOL@notation@IntegrateDisplayFunc}{inset}
+\newcommand{\Integrate}[2]{%
+\listval{#2}{0}%
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}%
+\ifthenelse{ \value{COOL@listlen} = 1 }%
+{%
+\ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{outset}}%
+{%
+\int \! d#2 \, #1%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{inset}}%
+{%
+\int #1 \, d#2%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{`DisplayFunc' can only be `inset' or `outset'}%
+}}%
+}%
+{ \ifthenelse{ \value{COOL@listlen} = 2 }%
+{%
+\ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{outset}}%
+{%
+\int_{\listval{#2}{2}} \! d{\listval{#2}{1}} \, #1%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{inset}}%
+{%
+\int_{\listval{#2}{2}} #1 \, d{\listval{#2}{1}}%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{`DisplayFunc' can only be `inset' or `outset'}%
+}}%
+}%
+{ \ifthenelse{ \value{COOL@listlen} = 3 }%
+{%
+\ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{outset}}%
+{%
+\int_{\listval{#2}{2}}^{\listval{#2}{3}} \! d{\listval{#2}{1}} \, #1%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{inset}}%
+{%
+\int_{\listval{#2}{2}}^{\listval{#2}{3}} #1 \, d{\listval{#2}{1}}%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{`DisplayFunc' can only be `inset' or `outset'}%
+}}%
+}%
+{%
+\PackageError{cool}{`Integrate' has invalid parameter list}%
+ {this happens when the second argument has more than two commas}%
+}}}%
+}%
+\newcommand{\Int}[2]{\Integrate{#1}{#2}}
+\newcommand{\Sum}[2]{%
+\listval{#2}{0}%
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}
+\ifthenelse{ \value{COOL@listlen} = 1 }%
+{%
+\sum_{#2} #1%
+}%
+{%
+\ifthenelse{ \value{COOL@listlen} = 3 }%
+{%
+\sum_{ \listval{#2}{1} = \listval{#2}{2} }^{ \listval{#2}{3} } #1
+}%
+{%
+\PackageError{cool}{Invalid list length for `Sum'}%
+{can only have none or two commas for second argument}%
+}%
+}%
+}
+\newcommand{\Prod}[2]{%
+\listval{#2}{0}%
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}
+\ifthenelse{ \value{COOL@listlen} = 1 }%
+{%
+\prod_{#2} #1%
+}%
+{%
+\ifthenelse{ \value{COOL@listlen} = 3 }%
+{%
+\prod_{ \listval{#2}{1} = \listval{#2}{2} }^{ \listval{#2}{3} } #1
+}%
+{%
+\PackageError{cool}{Invalid list length for `Prod'}%
+{can only have none or two commas for second argument}%
+}%
+}%
+}
+\newcommand{\DotProduct}[2]{#1 \cdot #2}
+\newcommand{\Cross}[2]{#1 \times #2}
+\newcommand{\Div}[1]{\nabla \cdot #1}
+\newcommand{\Grad}[1]{\nabla #1}
+\newcommand{\Curl}[1]{\nabla \times #1}
+\newcommand{\Laplacian}[1]{\nabla^2 #1}
+\newcommand{\COOL@notation@TransposeParen}{inv}
+\newcommand{\Transpose}[1]{ \COOL@decide@paren{Transpose}{#1}^T }
+\newcommand{\COOL@notation@DaggerParen}{inv}
+\newcommand{\Dagger}[1]{ \COOL@decide@paren{Dagger}{#1}^\dagger }
+\newcommand{\COOL@notation@DetParen}{none}
+\newcommand{\COOL@notation@DetDisplay}{det}
+\newcommand{\Det}[1]{%
+\ifthenelse{\equal{\COOL@notation@DetDisplay}{det}}%
+{%
+\det\COOL@decide@paren{Det}{#1}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@DetDisplay}{barenc}}%
+{%
+\left|#1\right|%
+}%
+{%
+\PackageError{cool}{Invalid Option Sent}%
+{`DetDisplay' can only be `det' or `barenc'}%
+}}%
+}
+\newcommand{\COOL@notation@TrParen}{none}
+\newcommand{\Tr}[2][]{%
+\ifthenelse{\equal{#1}{}}
+{%
+\operatorname{Tr}\COOL@decide@paren{Tr}{#2}%
+}%
+{%
+\operatorname{Tr}_{#1}\COOL@decide@paren{Tr}{#2}%
+}%
+}
+\newcommand{\COOL@notation@IdentityMatrixParen}{p}
+\newcounter{COOL@row}%
+\newcounter{COOL@col}%
+\newcommand{\IdentityMatrix}[1][0]{%
+\isint{#1}%
+\ifthenelse{\boolean{COOL@isint}}%
+{%
+\ifthenelse{ #1=0 }%
+{%
+\mathbb{I}%
+}%
+{%
+\setcounter{COOL@ct}{\value{MaxMatrixCols}}%
+\setcounter{MaxMatrixCols}{#1}%
+\ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{p}}%
+{%
+\begin{pmatrix}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{b}}%
+{%
+\begin{bmatrix}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{br}}%
+{%
+\begin{Bmatrix}%
+}%
+{%
+\begin{matrix}%
+}}}%
+\forLoop{1}{#1}{COOL@row}%
+{%
+\ifthenelse{\NOT \value{COOL@row} = 1}{\\}{}%
+\forLoop{1}{#1}{COOL@col}%
+{%
+\ifthenelse{ \NOT \value{COOL@col} = 1 }{&}{}%
+\ifthenelse{ \value{COOL@row}=\value{COOL@col} }{1}{0}%
+}%
+}%
+\ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{p}}%
+{%
+\end{pmatrix}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{b}}%
+{%
+\end{bmatrix}%
+}%
+{ \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{br}}%
+{%
+\end{Bmatrix}%
+}%
+{%
+\end{matrix}%
+}}}%
+\setcounter{MaxMatrixCols}{\value{COOL@ct}}%
+}%
+}%
+{%
+\mathbb{I}%
+}%
+}%
+\endinput
+%%
+%% End of file `cool.sty'.