\newcommand{\prac}{}
\newcommand{\lect}{}
\newcommand{\self}{}

\newcommand{\points}[1]{{\color{red}[#1 \ifthenelse{#1=1}{point}{points}]}}

\newcommand{\setsectionnum}[1]{%
  \unless\iftitle%
    \setcounter{section}{#1}%
  \fi%
}

\makeatletter
\newcommand\annotateFilename[1]{%
  \ifannotate
    \filename@parse{#1}%
    \edef\filename{\detokenize\expandafter{\filename@base}.\detokenize\expandafter{\filename@ext}}%
    \marginnote{\fbox{\color{red}\filename}}
  \fi
}
\makeatother


\newcommand\printSolution[1]{
  \begin{solutionBox}%
    \input{#1}\annotateFilename{#1}%
  \end{solutionBox}%
}

\newcommand\printSolutionBreakable[1]{
  \begin{breakableSolutionBox}%
    \input{#1}\annotateFilename{#1}%
  \end{breakableSolutionBox}%
}


\newcommand\question[4][]{%
  \def\BREAKABLE{#1}%
  \def\FILENAME{#2}%
  \def\SOLUTIONS{#3}%
  \def\SPACING{#4}%
  \input{\FILENAME}\annotateFilename{\FILENAME}
  \ifsolution
    \ifthenelse{ \equal{\BREAKABLE}{} }%
    {\renewcommand*{\do}[1]{\printSolution{##1}}% How to process each item
    \docsvlist{#3}}%
    {\renewcommand*{\do}[1]{\printSolutionBreakable{##1}}% How to process each item
    \docsvlist{#3}}%
  \fi
  \ifspacing
    \vspace{\SPACING}
  \fi
}

\newcommand\mcquestion[2]{%
  \def\QUESTION{#1}%
  \def\SOLUTION{#2}%
  \ifsolution
    \input{\SOLUTION}\annotateFilename{\SOLUTION}
  \else
    \input{\QUESTION}\annotateFilename{\QUESTION}
  \fi
}

\newcommand\dpllquestion[2]{%
  \def\QUESTION{#1}%
  \def\SOLUTION{#2}%
  \ifsolution
    \input{\SOLUTION}
  \else
    \input{\QUESTION}
  \fi
}

\newcommand*\widefbox[1]{%
  \def\TOPBOTMARGIN{.5}
  \def\LEFTMARGIN{0.5ex}
  \def\SOLUTIONTEXT{#1}
  \fbox{\parbox{%
    \dimexpr\textwidth-11\fboxsep-4\fboxrule\relax}{
    \vspace{\TOPBOTMARGIN\baselineskip}\hspace{\LEFTMARGIN}\SOLUTIONTEXT\vspace{\TOPBOTMARGIN\baselineskip}}
  }
}


\newenvironment{pythonSourceCode}
  {\VerbatimEnvironment\begin{minted}[mathescape, linenos, numbersep=5pt, gobble=2, frame=lines, framesep=2mm]{python}}
  {\end{minted}}

\makeatletter
\NewDocumentEnvironment{refenumerate}{m}
 {\begin{enumerate}[align=left,leftmargin=1.0em,itemsep=0.25em,itemindent=2.25em,label=\thesubsection.{\arabic*}]}
 {\edef\@currentlabel{\arabic{\@enumctr}}\label{#1}\end{enumerate}}
\makeatother
\newcommand{\getenumcount}[1]{\getrefnumber{#1}}

\newenvironment{questionSection}[1]%
  {
    \subsection{#1\ifannotate{\color{red}~- \getenumcount{\thesubsection} Questions}\fi}%
    \begin{refenumerate}{\thesubsection}%
  }%
  {%
    \end{refenumerate}%
  }%

\newenvironment{compactItemize}[1][-0.2pt]
  {\begin{itemize}\setlength{\itemsep}{#1}}
  {\end{itemize}}

\newenvironment{questionEnumerate}[1][-1em]
  {\mbox{}\vspace{-0.7em}%
  \begin{enumerate}[label=(\alph*)]\setlength{\itemsep}{#1}}
  {\end{enumerate}}

\newcommand\TODONOTE[1]{
  \marginnote{\color{red}\footnotesize TODO}
}


