\documentclass{article} \usepackage{luacas} \usepackage{amsmath} \usepackage{amssymb} \usepackage[margin=1in]{geometry} \usepackage[shortlabels]{enumitem} \usepackage{pgfplots} \pgfplotsset{compat=1.18} \usetikzlibrary{positioning,calc} \usepackage{forest} \usepackage{minted} \usemintedstyle{pastie} \usepackage[hidelinks]{hyperref} \usepackage{parskip} \usepackage{multicol} \usepackage[most]{tcolorbox} \tcbuselibrary{xparse,documentation} \usepackage{microtype} \usepackage{makeidx} \usepackage{fontawesome} \usepackage[ backend=biber, style=numeric, ]{biblatex} \addbibresource{sources.bib} \definecolor{rose}{RGB}{128,0,0} \definecolor{roseyellow}{RGB}{222,205,99} \definecolor{roseblue}{RGB}{167,188,214} \definecolor{rosenavy}{RGB}{79,117,139} \definecolor{roseorange}{RGB}{232,119,34} \definecolor{rosegreen}{RGB}{61,68,30} \definecolor{rosewhite}{RGB}{223,209,167} \definecolor{rosebrown}{RGB}{108,87,27} \definecolor{rosegray}{RGB}{84,88,90} \definecolor{codegreen}{HTML}{49BE25} \newtcolorbox{codebox}[1][sidebyside]{ enhanced,skin=bicolor, #1, arc=1pt, colframe=brown, colback=brown!15,colbacklower=white, boxrule=1pt, notitle } \newtcolorbox{codehead}[1][]{ enhanced, frame hidden, colback=rosegray!15, boxrule=0mm, leftrule=5mm, rightrule=5mm, boxsep=0mm, arc=0mm, outer arc=0mm, left=3mm, right=3mm, top=1mm, bottom=1mm, toptitle=1mm, bottomtitle=1mm, oversize, #1 } \usepackage{varwidth} \newtcolorbox{newcodehead}[2][]{ enhanced, frame hidden, colback=rosegray!15, boxrule=0mm, leftrule=5mm, rightrule=5mm, boxsep=0mm, arc=0mm, outer arc=0mm, left=3mm, right=3mm, top=1mm, bottom=1mm, toptitle=1mm, bottomtitle=1mm, oversize, #1, fonttitle=\bfseries\ttfamily\footnotesize, coltitle=rosegray, attach boxed title to top text right, boxed title style={frame hidden,size=small,bottom=-1mm, interior style={fill=none, top color=white, bottom color=white}}, title={#2} } \makeindex \newcommand{\coderef}[2]{% \begin{codehead}[sidebyside,segmentation hidden]% \mintinline{lua}{#1}% \tcblower% \begin{flushright}% \mintinline{lua}{#2}% \end{flushright}% \end{codehead}% } \newcommand{\newcoderef}[3]{% \begin{newcodehead}[sidebyside,segmentation hidden]{#3}% \mintinline{lua}{#1}% \tcblower% \begin{flushright}% \mintinline{lua}{#2}% \end{flushright}% \end{newcodehead}% } \begin{document} \setdescription{style=multiline, topsep=10pt, leftmargin=5cm, } \subsection{Calculus Classes} There are only a few classes (currently) in the calculus module all of which are concrete: \begin{itemize} \item {\ttfamily DerivativeExpression} \item {\ttfamily DiffExpression} \item {\ttfamily IntegralExpression} \end{itemize} \newcoderef{function DerivativeExpression:new(expression, symbol)}{return DerivativeExpression}{expression Expression, symbol SymbolExpression} \addcontentsline{toc}{subsubsection}{\ttfamily DerivativeExpression} Creates a new single-variable derivative operation of the given \texttt{expression} with respect to the given \texttt{symbol}. If \texttt{symbol} is omitted, then \texttt{symbol} takes the default value of \mintinline{lua}{SymbolExpression("x")}. For example: \begin{codebox} \begin{minted}[fontsize=\small]{lua} vars('x') f = DerivativeExpression(sin(x)/x) tex.print('\\[', f:tolatex(), '\\]') \end{minted} \tcblower \luaexec{ vars('x') f = DerivativeExpression(sin(x)/x) tex.print('\\[', f:tolatex(), '\\]') } \end{codebox} \subsubsection*{Parsing} The function \mintinline{lua}{DD()} shortcuts \mintinline{lua}{DerivativeExpression()}. \begin{codebox} \begin{minted}[fontsize=\small]{latex} \begin{CAS} vars('x') f = DD(sin(x)/x) \end{CAS} \[ \print{f} \] \end{CAS} \end{minted} \tcblower \begin{CAS} vars('x') f = DD(sin(x)/x) \end{CAS} \[ \print{f} \] \end{codebox} Alternatively, one could also use \mintinline{lua}{diff()} (see below). \newcoderef{function DiffExpression:new(expression, symbols)}{return DiffExpression}{expression Expression, symbols table} \addcontentsline{toc}{subsubsection}{\ttfamily DiffExpression} Creates a new multi-variable higher-order derivative operation of the given \texttt{expression} with respect to the given \texttt{symbols}. As opposed to \texttt{DerivativeExpression}, the argument \texttt{symbols} cannot be omitted. For example: \begin{codebox} \begin{minted}[fontsize=\small]{lua} vars('x','y') f = DiffExpression(sin(x*y)/y,{x,y}) tex.print('\\[', f:tolatex(), '\\]') \end{minted} \tcblower \luaexec{ vars('x','y') f = DiffExpression(sin(x*y)/y,{x,y}) tex.print('\\[', f:tolatex(), '\\]') } \end{codebox} We can also use \texttt{DiffExpression} to create higher-order single variable derivatives: \begin{codebox} \begin{minted}[fontsize=\small]{lua} vars('x') f = DiffExpression(sin(x)/x,{x,x}) tex.print('\\[', f:tolatex(), '\\]') \end{minted} \tcblower \luaexec{ vars('x') f = DiffExpression(sin(x)/x,{x,x}) tex.print('\\[', f:tolatex(), '\\]') } \end{codebox} \subsubsection*{Parsing} The function \mintinline{lua}{diff()} shortcuts \mintinline{lua}{DiffExpression()}. The arguments of \mintinline{lua}{diff()} can also be given in a more user-friendly, compact form. For example: \begin{codebox}[] \begin{minted}[fontsize=\small]{latex} \begin{CAS} vars('x','y') f = diff(sin(x)/x, {x,2}) g = diff(sin(x*y)/y,x,{y,2}) \end{CAS} \[ \print{f} = \print*{f} \qquad \print{g} = \print*{g} \] \end{minted} \tcblower \begin{CAS} vars('x','y') f = diff(sin(x)/x, {x,2}) g = diff(sin(x*y)/y,x,{y,2}) \end{CAS} \[ \print{f} = \print*{f} \qquad \print{g} = \print*{g} \] \end{codebox} \newcoderef{function IntegralExpression:new(expression,symbol,lower,upper)}{return IntegralExpression}{expression Expression, symbol SymbolExpression, lower Expression, upper Expression} \addcontentsline{toc}{subsubsection}{\ttfamily IntegralExpression} Creates a new integral operation of the given \texttt{expression} with respect to the given \texttt{symbol} over the given \texttt{lower} and \texttt{upper} bounds. If \texttt{lower} and \texttt{upper} are omitted, then an \emph{indefinite} \texttt{IntegralExpression} is constructed. For example: \begin{codebox} \begin{minted}[fontsize=\small,breaklines]{lua} vars('x') f = IntegralExpression(sin(sqrt(x)), x) g = IntegralExpression(sin(sqrt(x)), x, Integer.zero(), pi) tex.print('\\[', f:tolatex(), '\\]') tex.print('\\[', g:tolatex(), '\\]') \end{minted} \tcblower \luaexec{ vars('x') f = IntegralExpression(sin(sqrt(x)),x) g = IntegralExpression(sin(sqrt(x)),x,Integer.zero(),pi) tex.print('\\[', f:tolatex(), '\\]') tex.print('\\[', g:tolatex(), '\\]') } \end{codebox} \subsubsection*{Parsing} The function \mintinline{lua}{int()} shortcuts \mintinline{lua}{IntegralExpression()}. For example: \begin{codebox} \begin{minted}[fontsize=\small]{latex} \begin{CAS} g = int(sin(sqrt(x)),x,0,pi) \end{CAS} \[ \print{g} = \print*{g} \] \end{minted} \tcblower \begin{CAS} g = int(sin(sqrt(x)),x,0,pi) \end{CAS} \[ \print{g} = \print*{g} \] \end{codebox} \end{document}