\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<number, Symbol>}
\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}