\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pmdraw}[2026-04-25 v2.5 pmdraw]

% *------------------------------*
% |``````````````````````````````|
% |`````____````____`````````````|
% |````|MFMF\  /MFMF|````````````|
% |````|MF|MF\/MF|MF|````````````|
% |````|MF|\MFMF/|MF|_______`````|
% |````|MF|``````|MFMFMFMFMF|````|
% |````|MF|``````|MF|````````````|
% |````|MF|``````|MF|___`````````|
% |``````````````|MFMFMF|````````|
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
% |``````````````````````````````|
% *------------------------------*

% *=-=-=-=-=-=*
%  signature=MIGEAkBU4sqaAehAjkqwdggTwGkycQyLwHkT8vgZOg6Nf+Q5tV9u5aAwJRwXiYSlA3jM3zEG4AapWJP2LD+Ca/dAL+3xAkAV+ItE/PAjvnj/PPP14rLy6RQ3CQuNiZ1zHL7ZeE5ADO/OTqrfDDvDFX+vyHtwkiiBNW5sPCHFx/Tps8+CJX04
%  version=2.0
% *=-=-=-=-=-=*

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
% Licence                                                %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% Copyright 2023-10-16 (original release) -- 2026, Matthias Fresacher
% 
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is found via
% http://www.latex-project.org/lppl.txt.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
% Required packages                                      %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% \RequirePackage{datetime}
\RequirePackage{xkeyval}
\RequirePackage{tikz}
\usetikzlibrary{math,decorations.pathreplacing,calligraphy,backgrounds}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Internal control and option commands                  %
%   - loosely ordered alphabetically                     %
%   - includes default values where appropriate          %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\pmdraw@braceLabel}{}% Label of brace

\newcommand{\pmdraw@bracketLabel}{}% Label of bracket
\newcommand{\pmdraw@BracketSep}{}% Separation for bracket
\newcommand{\pmdraw@BracketShift}{}% Shift of bracket
\newcommand{\pmdraw@BracketShiftUp}{}% Makes bracket higher
\newcommand{\pmdraw@BracketShiftDown}{}% Makes bracket lower

\newcommand{\pmdraw@diagSep}{1}% Vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram

\newcommand{\pmdraw@drawAedgesOptions}{}% Draw options for added edges in product diagram
\newcommand{\pmdraw@drawAedgesOptionsDefault}{}% Default draw options for added edges in product diagram
\newcommand{\pmdraw@drawAedges}[2]{% Draws added edges in product diagram from #1 vertex to #2 vertex, assumes #1<#2
    \@ifclassloaded{beamer}{% If in beamer
        \uncover<\pmdraw@edgesAddedUncover>{% Uncovers added edges
            \foreach \x in {#1,...,#2} {% For each vertex in range
                \ifnum\value{pmdraw@ifEdgesAdded}=0% If drawing added edges
                    \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptionsDefault,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
                \else% If hiding top vertices
                    \phantom{%
                        \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptionsDefault,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
                    }%
                \fi%
            }%
        }%
    }{% If not in beamer
        \foreach \x in {#1,...,#2} {% For each vertex in range
            \ifnum\value{pmdraw@ifEdgesAdded}=0% If drawing added edges
                \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptionsDefault,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
            \else% If hiding top vertices
                \phantom{%
                    \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptionsDefault,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
                }%
            \fi%
        }%
    }%
    \pmdraw@AedgesLoop% Restart for loop
}

\newcommand{\pmdraw@drawBraceDrawOptions}{}% Draw options for brace
\newcommand{\pmdraw@drawBraceNodeOptions}{}% Node options for brace
\newcommand{\pmdraw@drawBraceDefault}[3]{% Draws a brace starting from #1 vertex to #2 vertex with label #3, assumes #1<#2 - DEFAULT
    \ifnum\pmdraw@ifProdDiag=1% If drawing a product diagram or if placing brace above diagram
        \draw[
            very thick,
            decorate,
            decoration={calligraphic brace,amplitude=6pt},
            apply style/.expand once=\pmdraw@drawBraceDrawOptions
        ] (#1-0.17,\pmdraw@rowSep+0.5) -- (#2+0.17,\pmdraw@rowSep+0.5)
        node[
            pos=0.5,
            above=6pt,
            apply style/.expand once=\pmdraw@drawBraceNodeOptions
        ] {\(#3\)};% Draw brace on top of diagram
    \else% If not drawing a product diagram or if placing brace below diagram
        \draw[
            very thick,
            decorate,
            decoration={calligraphic brace,mirror,amplitude=6pt},
            apply style/.expand once=\pmdraw@drawBraceDrawOptions
        ] (#1-0.17,-0.5) -- (#2+0.17,-0.5)
        node[
            pos=0.5,
            below=6pt,
            apply style/.expand once=\pmdraw@drawBraceNodeOptions
        ] {\(#3\)};% Draw brace on bottom of diagram
    \fi%
}
\let\pmdraw@drawBrace\pmdraw@drawBraceDefault% Draws a brace starting from #1 vertex to #2 vertex with label #3, assumes #1<#2

\newcommand{\pmdraw@drawBracketDrawOptions}{}% Draw options for bracket
\newcommand{\pmdraw@drawBracketNodeOptions}{}% Node options for bracket
\newcommand{\pmdraw@drawBracketDefault}[1]{% Draws a bracket to the left or right of a diagram with label #1
    \begin{scope}[shift={(\pmdraw@BracketShift,0)}]% Shifts bracket horizontally
        \ifnum\pmdraw@ifBracketLeft=1% If placing bracket to the left of the brick
            \draw[
                |-|,
                apply style/.expand once=\pmdraw@drawBracketDrawOptions
            ] ({1-\pmdraw@BracketSep},{0-\pmdraw@BracketShiftDown}) -- ({1-\pmdraw@BracketSep},{\pmdraw@rowSep+\pmdraw@BracketShiftUp})
            node[
                pos=0.5,
                left=3pt,
                apply style/.expand once=\pmdraw@drawBracketNodeOptions
            ] {\(#1\)};% Draw bracket on left of brick
        \else% If placing bracket to the right of the brick
            \draw[
                |-|,
                apply style/.expand once=\pmdraw@drawBracketDrawOptions
            ] ({\value{pmdraw@degreeB}+\pmdraw@BracketSep},{0-\pmdraw@BracketShiftDown}) -- ({\value{pmdraw@degreeB}+\pmdraw@BracketSep},{\pmdraw@rowSep+\pmdraw@BracketShiftUp})
            node[
                pos=0.5,
                right=3pt,
                apply style/.expand once=\pmdraw@drawBracketNodeOptions
            ] {\(#1\)};% Draw bracket on right of brick
        \fi%
    \end{scope}%
}
\let\pmdraw@drawBracket\pmdraw@drawBracketDefault% Draws a bracket to the left or right of a diagram with label #1

\newcommand{\pmdraw@drawDotsDrawOptions}{}% Draw options for dots between bricks
\newcommand{\pmdraw@drawDotsNodeOptions}{}% Node options for dots between bricks
\newcommand{\pmdraw@drawDotsDefault}[2]{% Draws dots between bricks at (#1,#2) - DEFAULT
    \draw[apply style/.expand once=\pmdraw@drawDotsDrawOptions] (#1,#2) node[apply style/.expand once=\pmdraw@drawDotsNodeOptions] {\(\dots\)};%
}
\let\pmdraw@drawDots\pmdraw@drawDotsDefault% Draws dots between bricks at (#1,#2)

\newcommand{\pmdraw@drawEdgeDrawOptions}{}% Draw options for edge

\newcommand{\pmdraw@drawEdgeFill}{}% Fill options for edge

\newcommand{\pmdraw@drawEdgeLabelOptions}{}% Node options for label of edge

\newcommand{\pmdraw@drawEdgeRadius}{}% Radius of arc in edge
\newcommand{\pmdraw@drawEdgeRadiusLeft}{}% Radius of left arc in edge
\newcommand{\pmdraw@drawEdgeRadiusRight}{}% Radius of arc right in edge

\newcommand{\pmdraw@drawLabelBDrawOptions}{}% Draw options for label of a vertex in bottom row
\newcommand{\pmdraw@drawLabelBNodeOptions}{}% Node options for label of a vertex in bottom row
\newcommand{\pmdraw@drawLabelBottomDefault}[3]{% For bottom row, draws the label #3 for a vertex at (#1,#2) - DEFAULT
    \draw[apply style/.expand once=\pmdraw@drawLabelBDrawOptions] (#1,#2) node[below=6pt,apply style/.expand once=\pmdraw@drawLabelBNodeOptions] {\(#3'\)};%
}
\let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault% For bottom row, draws the label #3 for a vertex at (#1,#2)

\newcommand{\pmdraw@drawLabelTDrawOptions}{}% Draw options for label of a vertex in top row
\newcommand{\pmdraw@drawLabelTNodeOptions}{}% Node options for label of a vertex in top row
\newcommand{\pmdraw@drawLabelTopDefault}[3]{% For top row, draws the label #3 for a vertex at (#1,#2) - DEFAULT
    \draw[apply style/.expand once=\pmdraw@drawLabelTDrawOptions] (#1,#2) node[above=6pt,apply style/.expand once=\pmdraw@drawLabelTNodeOptions] {\(#3\)};%
}
\let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault% For top row, draws the label #3 for a vertex at (#1,#2)

\newcommand{\pmdraw@drawLedgesDrawOptions}{}% Draw options for lower non-transversal edges
\newcommand{\pmdraw@drawLedgesDrawOptionsDefault}{}% Default draw options for lower non-transversal edges
\newcommand{\pmdraw@drawLedgesDrawDefault}[2]{% Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 - DEFAULT
    \ifnum\pmdraw@ifEquiv=1% If drawing an equivalence relation
        \begin{scope}[shift={(0,2)}]% Shift bottom row to top row
    \fi%
    \ifnum\pmdraw@ifEdgesFill=1% If filling edges
        \ifnum\pmdraw@ifRadiusChange=1% If drawing a non default radius
            \draw[apply style/.expand once=\pmdraw@drawEdgeFill] (#1,0) {[rounded corners={0.5*\pmdraw@drawEdgeRadius cm}] -- (#1, \pmdraw{edgeHeight}) -- (#2, \pmdraw{edgeHeight})} -- (#2,0) -- cycle; % Draw rectangle
            \if\relax\pmdraw@NTedgeLabel\relax\else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions,apply style/.expand once=\pmdraw@drawEdgeFill] (#1+\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight}) -- (#2-\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \else% If drawing the default radius
            \draw[apply style/.expand once=\pmdraw@drawEdgeFill] (#1,0) {[rounded corners={0.5*\pmdraw{edgeHeight}cm}] -- (#1, \pmdraw{edgeHeight}) -- (#2, \pmdraw{edgeHeight})} -- (#2,0) -- cycle; % Draw rectangle
            \if\relax\pmdraw@NTedgeLabel\relax\else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions,apply style/.expand once=\pmdraw@drawEdgeFill] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \fi%
    \else % If not filling edges
        \ifnum\pmdraw@ifRadiusChange=1% If drawing a non default radius
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,0) --  (#1,{\pmdraw{edgeHeight}-\pmdraw@drawEdgeRadius});% Draw left vertical line
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,{\pmdraw{edgeHeight}-\pmdraw@drawEdgeRadius}) arc (180:90:\pmdraw@drawEdgeRadius);% Draw left arch
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight}) arc (90:0:\pmdraw@drawEdgeRadius);% Draw right arc
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) --  (#2,{\pmdraw{edgeHeight}-\pmdraw@drawEdgeRadius});% Draw right vertical line
            \if\relax\pmdraw@NTedgeLabel\relax% If label is empty
                \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight}) -- (#2-\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight});% Draw straight line
            \else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight}) -- (#2-\pmdraw@drawEdgeRadius,\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \else% If drawing the default radius
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,0) arc (180:90:\pmdraw{edgeHeight});% Draw left arch
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) arc (90:0:\pmdraw{edgeHeight});% Draw right arc
            \if\relax\pmdraw@NTedgeLabel\relax% If label is empty
                \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight});% Draw straight line
            \else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \fi%
    \fi%
    \ifnum\pmdraw@ifEquiv=1% If drawing an equivalence relation
        \end{scope}%
    \fi%
    \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge
    \renewcommand{\pmdraw@ifEdgesFill}{0}% Resets that edges are filled
    \renewcommand{\pmdraw@ifRadiusChange}{0}% Reset if drawing an edge with a custom radius
}
\let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2

\newcommand{\pmdraw@drawGhostVertexBz}{-1}% 0th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBa}{-1}% 1st vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBb}{-1}% 2nd vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBc}{-1}% 3rd vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBd}{-1}% 4th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBe}{-1}% 5th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBf}{-1}% 6th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBg}{-1}% 7th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBh}{-1}% 8th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBi}{-1}% 9th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBz}{-1}% 10th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBa}{-1}% 11th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBb}{-1}% 12th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBc}{-1}% 13th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBd}{-1}% 14th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBe}{-1}% 15th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBf}{-1}% 16th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBg}{-1}% 17th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBh}{-1}% 18th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexBBi}{-1}% 19th vertex to draw as ghost in bottom row
\newcommand{\pmdraw@drawGhostVertexTz}{-1}% 0th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTa}{-1}% 1st vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTb}{-1}% 2nd vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTc}{-1}% 3rd vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTd}{-1}% 4th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTe}{-1}% 5th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTf}{-1}% 6th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTg}{-1}% 7th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTh}{-1}% 8th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTi}{-1}% 9th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTz}{-1}% 10th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTa}{-1}% 11th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTb}{-1}% 12th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTc}{-1}% 13th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTd}{-1}% 14th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTe}{-1}% 15th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTf}{-1}% 16th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTg}{-1}% 17th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTh}{-1}% 18th vertex to draw as ghost in top row
\newcommand{\pmdraw@drawGhostVertexTTi}{-1}% 19th vertex to draw as ghost in top row

\newcommand{\pmdraw@drawNoLabelBz}{-1}% 0th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBa}{-1}% 1st vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBb}{-1}% 2nd vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBc}{-1}% 3rd vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBd}{-1}% 4th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBe}{-1}% 5th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBf}{-1}% 6th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBg}{-1}% 7th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBh}{-1}% 8th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBi}{-1}% 9th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBz}{-1}% 10th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBa}{-1}% 11th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBb}{-1}% 12th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBc}{-1}% 13th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBd}{-1}% 14th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBe}{-1}% 15th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBf}{-1}% 16th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBg}{-1}% 17th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBh}{-1}% 18th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelBBi}{-1}% 19th vertex to skip label in bottom row
\newcommand{\pmdraw@drawNoLabelTz}{-1}% 0th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTa}{-1}% 1st vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTb}{-1}% 2nd vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTc}{-1}% 3rd vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTd}{-1}% 4th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTe}{-1}% 5th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTf}{-1}% 6th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTg}{-1}% 7th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTh}{-1}% 8th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTi}{-1}% 9th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTz}{-1}% 10th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTa}{-1}% 11th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTb}{-1}% 12th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTc}{-1}% 13th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTd}{-1}% 14th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTe}{-1}% 15th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTf}{-1}% 16th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTg}{-1}% 17th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTh}{-1}% 18th vertex to skip label in top row
\newcommand{\pmdraw@drawNoLabelTTi}{-1}% 19th vertex to skip label in top row

\newcommand{\pmdraw@drawNoVertexBz}{-1}% 0th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBa}{-1}% 1st vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBb}{-1}% 2nd vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBc}{-1}% 3rd vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBd}{-1}% 4th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBe}{-1}% 5th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBf}{-1}% 6th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBg}{-1}% 7th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBh}{-1}% 8th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBi}{-1}% 9th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBz}{-1}% 10th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBa}{-1}% 11th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBb}{-1}% 12th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBc}{-1}% 13th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBd}{-1}% 14th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBe}{-1}% 15th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBf}{-1}% 16th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBg}{-1}% 17th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBh}{-1}% 18th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexBBi}{-1}% 19th vertex to skip in bottom row
\newcommand{\pmdraw@drawNoVertexTz}{-1}% 0th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTa}{-1}% 1st vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTb}{-1}% 2nd vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTc}{-1}% 3rd vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTd}{-1}% 4th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTe}{-1}% 5th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTf}{-1}% 6th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTg}{-1}% 7th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTh}{-1}% 8th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTi}{-1}% 9th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTz}{-1}% 10th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTa}{-1}% 11th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTb}{-1}% 12th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTc}{-1}% 13th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTd}{-1}% 14th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTe}{-1}% 15th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTf}{-1}% 16th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTg}{-1}% 17th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTh}{-1}% 18th vertex to skip in top row
\newcommand{\pmdraw@drawNoVertexTTi}{-1}% 19th vertex to skip in top row

\newcommand{\pmdraw@drawTedgesDrawOptions}{}% Draw options for transversal edges
\newcommand{\pmdraw@drawTedgesDrawOptionsDefault}{}% Default draw options for transversal edges
\newcommand{\pmdraw@drawTedgesDrawDefault}[2]{% Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row - DEFAULT
    \ifnum\pmdraw@ifTedgeHorizontal=0% If drawing a straight line edge
        \if\relax\pmdraw@TedgeLabel\relax% If label is empty
            \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) -- (#2,0) ;% Draw straight line
        \else% If label is non-empty
            \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) -- (#2,0) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@TedgeLabel};% Draw straight line with label
        \fi%
    \else% If transversal edge is drawn horizontally
        \ifnum#1>#2% If edge goes from top right to bottom left
            \ifnum\pmdraw@ifRadiusChange=1% If drawing a non default radius
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) --  (#2,{\pmdraw{Tlevel}-\pmdraw@drawEdgeRadiusLeft});% Draw left vertical line
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,\pmdraw{Tlevel}-\pmdraw@drawEdgeRadiusLeft) arc (180:90:\pmdraw@drawEdgeRadiusLeft);% Draw bottom arch
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1-\pmdraw@drawEdgeRadiusRight,\pmdraw{Tlevel}) arc (270:360:\pmdraw@drawEdgeRadiusRight);% Draw top arc
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) --  (#1,{\pmdraw{Tlevel}+\pmdraw@drawEdgeRadiusRight});% Draw right vertical line
                \if\relax\pmdraw@TedgeLabel\relax% If label is empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2+\pmdraw@drawEdgeRadiusLeft,\pmdraw{Tlevel}) -- (#1-\pmdraw@drawEdgeRadiusRight, \pmdraw{Tlevel});% Draw straight line
                \else% If label is non-empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2+\pmdraw@drawEdgeRadiusLeft,\pmdraw{Tlevel}) -- (#1-\pmdraw@drawEdgeRadiusRight, \pmdraw{Tlevel}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@TedgeLabel};% Draw straight line with label
                \fi%
            \else% If drawing the default radius
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) arc (180:90:\pmdraw{Tlevel});% Draw bottom arch
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1-\pmdraw@rowSep+\pmdraw{Tlevel},\pmdraw{Tlevel}) arc (270:360:{\pmdraw@rowSep-\pmdraw{Tlevel}});% Draw top arc
                \if\relax\pmdraw@TedgeLabel\relax% If label is empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2+\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1-\pmdraw@rowSep+\pmdraw{Tlevel}, \pmdraw{Tlevel});% Draw straight line
                \else% If label is non-empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2+\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1-\pmdraw@rowSep+\pmdraw{Tlevel}, \pmdraw{Tlevel}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@TedgeLabel};% Draw straight line with label
                \fi%
            \fi%
        \else% If edge goes from top left to bottom right
            \ifnum\pmdraw@ifRadiusChange=1% If drawing a non default radius
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) --  (#1,{\pmdraw{Tlevel}+\pmdraw@drawEdgeRadiusLeft});% Draw left vertical line
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@drawEdgeRadiusLeft,\pmdraw{Tlevel}) arc (270:180:\pmdraw@drawEdgeRadiusLeft);% Draw top arc
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,\pmdraw{Tlevel}-\pmdraw@drawEdgeRadiusRight) arc (0:90:\pmdraw@drawEdgeRadiusRight);% Draw bottom arch
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) --  (#2,\pmdraw{Tlevel}-\pmdraw@drawEdgeRadiusRight);% Draw right vertical line
                \if\relax\pmdraw@TedgeLabel\relax% If label is empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw@drawEdgeRadiusRight,\pmdraw{Tlevel}) -- (#1+\pmdraw@drawEdgeRadiusLeft, \pmdraw{Tlevel});% Draw straight line
                \else% If label is non-empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw@drawEdgeRadiusRight,\pmdraw{Tlevel}) -- (#1+\pmdraw@drawEdgeRadiusLeft, \pmdraw{Tlevel}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@TedgeLabel};% Draw straight line with label
                \fi%
            \else% If drawing the default radius
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,0) arc (0:90:\pmdraw{Tlevel});% Draw bottom arch
                \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@rowSep-\pmdraw{Tlevel},\pmdraw{Tlevel}) arc (270:180:{\pmdraw@rowSep-\pmdraw{Tlevel}});% Draw top arc
                \if\relax\pmdraw@TedgeLabel\relax% If label is empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1+\pmdraw@rowSep-\pmdraw{Tlevel}, \pmdraw{Tlevel});% Draw straight line
                \else% If label is non-empty
                    \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawTedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1+\pmdraw@rowSep-\pmdraw{Tlevel}, \pmdraw{Tlevel}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@TedgeLabel};% Draw straight line with label
                \fi%
            \fi%
        \fi%
        \renewcommand{\pmdraw@ifTedgeHorizontal}{0}% Reset flag to default
    \fi%
    \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge
    \renewcommand{\pmdraw@ifRadiusChange}{0}% Reset if drawing an edge with a custom radius
}
\let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault% Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row

\newcommand{\pmdraw@drawUedgesDrawOptions}{}% Draw options for upper non-transversal edges
\newcommand{\pmdraw@drawUedgesDrawOptionsDefault}{}% Default draw options for upper non-transversal edges
\newcommand{\pmdraw@drawUedgesDrawDefault}[2]{% Draws upper non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 - DEFAULT
    \ifnum\pmdraw@ifEdgesFill=1% If filling edges
        \ifnum\pmdraw@ifRadiusChange=1% If drawing a non default radius
            \draw[apply style/.expand once=\pmdraw@drawEdgeFill] (#1,\pmdraw@rowSep) {[rounded corners={0.5*\pmdraw@drawEdgeRadius cm}] -- (#1, \pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2, \pmdraw@rowSep-\pmdraw{edgeHeight})} -- (#2,\pmdraw@rowSep) -- cycle; % Draw rectangle
            \if\relax\pmdraw@NTedgeLabel\relax\else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions,apply style/.expand once=\pmdraw@drawEdgeFill] (#1+\pmdraw@drawEdgeRadius,\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw@drawEdgeRadius,\pmdraw@rowSep-\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \else% If drawing the default radius
            \draw[apply style/.expand once=\pmdraw@drawEdgeFill] (#1,\pmdraw@rowSep) {[rounded corners={0.5*\pmdraw{edgeHeight}cm}] -- (#1, \pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2, \pmdraw@rowSep-\pmdraw{edgeHeight})} -- (#2,\pmdraw@rowSep) -- cycle; % Draw rectangle
            \if\relax\pmdraw@NTedgeLabel\relax\else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions,apply style/.expand once=\pmdraw@drawEdgeFill] (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \fi%
    \else % If not filling edges
        \ifnum\pmdraw@ifRadiusChange=1% If drawing a non default radius
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) --  (#1,{\pmdraw@rowSep-\pmdraw{edgeHeight}+\pmdraw@drawEdgeRadius});% Draw left vertical line
            \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,{\pmdraw@rowSep-\pmdraw{edgeHeight}+\pmdraw@drawEdgeRadius}) arc (180:270:\pmdraw@drawEdgeRadius);% Draw left arch
            \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw@drawEdgeRadius,{\pmdraw@rowSep-\pmdraw{edgeHeight}}) arc (270:360:\pmdraw@drawEdgeRadius);% Draw right arc
            \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2,\pmdraw@rowSep) --  (#2,{\pmdraw@rowSep-\pmdraw{edgeHeight}+\pmdraw@drawEdgeRadius});% Draw right vertical line
            \if\relax\pmdraw@NTedgeLabel\relax% If label is empty
                \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@drawEdgeRadius,\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw@drawEdgeRadius,\pmdraw@rowSep-\pmdraw{edgeHeight});% Draw straight line
            \else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw@drawEdgeRadius,\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw@drawEdgeRadius,\pmdraw@rowSep-\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \else% If drawing the default radius
            \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight});% Draw left arch
            \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) arc (270:360:\pmdraw{edgeHeight});% Draw right arc
            \if\relax\pmdraw@NTedgeLabel\relax% If label is empty
                \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight});% Draw straight line
            \else% If label is non-empty
                \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptionsDefault,apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) node[fill=white, pos=0.5, apply style/.expand once=\pmdraw@drawEdgeLabelOptions] {\pmdraw@NTedgeLabel};% Draw straight line with label
            \fi%
        \fi%
    \fi%
    \renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge
    \renewcommand{\pmdraw@ifEdgesFill}{0}% Resets that edges are filled
    \renewcommand{\pmdraw@ifRadiusChange}{0}% Reset if drawing an edge with a custom radius
}
\let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault% Draws upper non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2

\newcommand{\pmdraw@drawVertexOptions}{}% Draw options for vertices
\newcommand{\pmdraw@drawVertexOptionsDefault}{}% Default draw options for vertices
\newcommand{\pmdraw@drawVertexDefault}[2]{% Draws a vertex at (#1,#2) - Default
    \fill[apply style/.expand once=\pmdraw@drawVertexOptionsDefault,apply style/.expand once=\pmdraw@drawVertexOptions] (#1,#2) circle (.17);%
}
\let\pmdraw@drawVertex\pmdraw@drawVertexDefault% Draws a ghost at (#1,#2)
\newcommand{\pmdraw@drawGhostOptions}{fill=black!7}% Draw options for ghosts
\newcommand{\pmdraw@drawGhostOptionsDefault}{fill=black!7}% Default draw options for ghosts
\newcommand{\pmdraw@drawGhostDefault}[2]{% Draws a ghost at (#1,#2) - Default
    \draw[apply style/.expand once=\pmdraw@drawGhostOptionsDefault,apply style/.expand once=\pmdraw@drawGhostOptions] (#1,#2) circle (.17);%
}
\let\pmdraw@drawVertexGhost\pmdraw@drawGhostDefault% Draws a ghost at (#1,#2)

\newcommand{\pmdraw@edgeUncover}{1-}% Sets the uncover options of edge
\newcommand{\pmdraw@edgesAddedUncover}{1-}% Sets the uncover options of added edges
\newcommand{\pmdraw@edgesUncover}{1-}% Sets the uncover options of edges

\newcommand{\pmdraw@hookAfterBrick}{}% Hook after drawing a brick
\newcommand{\pmdraw@hookAfterDiagram}{}% Hook after drawing a diagram
\newcommand{\pmdraw@hookBeforeBrick}{}% Hook before drawing a brick
\newcommand{\pmdraw@hookBeforeDiagram}{}% Hook before drawing a diagram

\newcommand{\pmdraw@ifBracketLeft}{1}% Boolean if drawing bracket on left of brick
\newcommand{\pmdraw@ifDiagWDots}{0}% Boolean if drawing a diagram with dots
\newcommand{\pmdraw@ifEdgesFill}{0}% Boolean if filling edges
\newcommand{\pmdraw@ifEdgesFirst}{0}% Boolean if drawing edges before vertices
\newcommand{\pmdraw@ifEquiv}{0}% Boolean if drawing an equivalence relation
\newcommand{\pmdraw@ifGrid}{0}% Boolean if displaying helper grid
\newcommand{\pmdraw@ifLabelsB}{0}% Boolean if displaying labels for vertices in bottom row
\newcommand{\pmdraw@ifLabelsT}{0}% Boolean if displaying labels for vertices in top row
\newcommand{\pmdraw@ifProdDiag}{0}% Boolean if drawing a product diagram
\newcommand{\pmdraw@ifRadiusChange}{0}% Boolean if drawing an edge with a custom radius
\newcommand{\pmdraw@ifTedgesFirst}{0}% Boolean if drawing transversal edges before non-transversal edges
\newcommand{\pmdraw@ifTedgeHorizontal}{0}% Boolean if transversal edge is drawn horizontally

\newcommand{\pmdraw@NTedgesHeight}{-1000}% Height of non-transversal edges if manually set, a value of -1000 sets height automatically
\newcommand{\pmdraw@NTedgeLabel}{}% Label of non-transversal edge

\newcommand{\pmdraw@reset}{% Resets user keys and other flags to default values after drawing diagram
    \renewcommand{\pmdraw@diagSep}{1}% Resets vertical space between product diagrams
    \renewcommand{\pmdraw@drawAedgesOptions}{}% Resets draw options for added edges in product diagram
    \let\pmdraw@drawDots\pmdraw@drawDotsDefault% Resets drawing of dots between bricks
    \renewcommand{\pmdraw@edgesAddedUncover}{1-}% Resets the uncover options of added edges
    \renewcommand{\pmdraw@hookAfterDiagram}{}% Clears hook after drawing a diagram
    \renewcommand{\pmdraw@hookBeforeDiagram}{}% Clears hook before drawing a diagram
    \renewcommand{\pmdraw@ifBracketLeft}{1}% Resets drawing bracket on left of brick
    \renewcommand{\pmdraw@ifGrid}{0}% Hides grid
    \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots
    \renewcommand{\pmdraw@ifEquiv}{0}% Reset if drawing an equivalence realtion
    \renewcommand{\pmdraw@rowSep}{2}% Resets vertical separation between rows of vertices in brick
    \renewcommand{\pmdraw@tikz}{}% Resets tikz options
    \renewcommand{\pmdraw@vertexSep}{0}% Resets vertical space between product diagrams
    \setcounter{pmdraw@blankB}{0}% Resets number of blank vertices in bottom row to the left of brick
    \setcounter{pmdraw@blankT}{0}% Resets number of blank vertices in top row to the left of brick
    \setcounter{pmdraw@bottomShift}{0}% Resets shift on right end of bottom row of brick
    \setcounter{pmdraw@topShift}{0}% Resets shift on right end of top row of brick
    \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
    \setcounter{pmdraw@ifEdgesAdded}{0}% Resets boolean if hiding added edges
}

\newcommand{\pmdraw@rowSep}{2}% Vertical separation between rows of vertices in brick

\newcommand{\pmdraw@TedgeLabel}{}% Label of transversal edge

\newcommand{\pmdraw@tikz}{}% Tikz options

\newcommand{\pmdraw@verticesBottomUncover}{1-}% Sets the uncover options of bottom vertices
\newcommand{\pmdraw@verticesTopUncover}{1-}% Sets the uncover options of top vertices

\newcommand{\pmdraw@vertexSep}{0}% Vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram not for added edges

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Counters                                              %
%   - loosely ordered alphabetically                     %
%   - includes default values where appropriate          %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcounter{pmdraw@blankB}% Number of blank vertices in bottom row to the left of brick
\newcounter{pmdraw@blankT}% Number of blank vertices in top row to the left of brick

\newcounter{pmdraw@bottomTotal}% Size of bottom row of brick
\newcounter{pmdraw@bottomShift}% Shift on right end of bottom row of brick

\newcounter{pmdraw@braceL}% Left starting vertex of brace
\newcounter{pmdraw@braceR}% Right terminating vertex of brace

\newcounter{pmdraw@brickShift}% Shift required for bricks after dots in diagram with dots

\newcounter{pmdraw@degreeB}% Degree (number of vertices) of bottom row of brick
\newcounter{pmdraw@degreeT}% Degree (number of vertices) of top row of brick

\newcounter{pmdraw@ifDiagWDotsFirst}% In drawing with dots, boolean if drawing first brick of diagram
\setcounter{pmdraw@ifDiagWDotsFirst}{1}

\newcounter{pmdraw@ifEdge}% Boolean if hiding edge
\setcounter{pmdraw@ifEdge}{0}
\newcounter{pmdraw@ifEdgesAdded}% Boolean if hiding added edges
\setcounter{pmdraw@ifEdgesAdded}{0}
\newcounter{pmdraw@ifEdges}% Boolean if hiding edges
\setcounter{pmdraw@ifEdges}{0}

\newcounter{pmdraw@ifVerticesBottom}% Boolean if hiding bottom row of vertices
\setcounter{pmdraw@ifVerticesBottom}{0}
\newcounter{pmdraw@ifVerticesTop}% Boolean if hiding top row of vertices
\setcounter{pmdraw@ifVerticesTop}{0}

\newcounter{pmdraw@labelStartB}% Starting value of labels of vertices in bottom row
\setcounter{pmdraw@labelStartB}{1}
\newcounter{pmdraw@labelStartT}% Starting value of labels of vertices in top row
\setcounter{pmdraw@labelStartT}{1}

\newcounter{pmdraw@NTlevel}% Level corresponding to a height for a non-transversal edge

\newcounter{pmdraw@topTotal}% Size of top row of brick
\newcounter{pmdraw@topShift}% Shift on right end of top row of brick

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Keys for bricks                                       %
%   - ordered as per manual                              %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% To pass draw options to \draw command
% Verbatim copy from:
% https://tex.stackexchange.com/a/64237
\tikzset{apply style/.code={\tikzset{#1}}}

\define@key{pmdraw@brick}{degree}{% Sets degree (number of vertices per row) of diagram
    \setcounter{pmdraw@degreeB}{#1}% Sets degree (number of vertices per row) for bottom row
    \setcounter{pmdraw@degreeT}{#1}% Sets degree (number of vertices per row) for top row
}
\define@key{pmdraw@brickDefault}{degree}{% Sets default degree (number of vertices per row) of diagram
    \setkeys{pmdraw@brick}{%
        \savevalue{degree bottom}=#1%
    }%
    \setkeys{pmdraw@brick}{%
        \savevalue{degree top}=#1%
    }%
}
\define@key{pmdraw@brick}{degree bottom}{% Sets degree (number of vertices per row) for bottom row
    \setcounter{pmdraw@degreeB}{#1}%
}
\define@key{pmdraw@brickDefault}{degree bottom}{% Sets default degree (number of vertices per row) for bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{degree bottom}=#1%
    }%
}
\define@key{pmdraw@brick}{degree top}{% Sets degree (number of vertices per row) for top row
    \setcounter{pmdraw@degreeT}{#1}%
}
\define@key{pmdraw@brickDefault}{degree top}{% Sets default degree (number of vertices per row) for top row
    \setkeys{pmdraw@brick}{%
        \savevalue{degree top}=#1%
    }%
}

\define@key{pmdraw@brick}{blank bottom}{% Sets the number of blank vertices on left of bottom row
    \setcounter{pmdraw@blankB}{#1}%
}
\define@key{pmdraw@brickDefault}{blank bottom}{% Sets the default number of blank vertices on left of bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{blank bottom}=#1%
    }%
}
\define@key{pmdraw@brick}{blank top}{% Sets the number of blank vertices on left of top row
    \setcounter{pmdraw@blankT}{#1}%
}
\define@key{pmdraw@brickDefault}{blank top}{% Sets the default number of blank vertices on left of top row
    \setkeys{pmdraw@brick}{%
        \savevalue{blank top}=#1%
    }%
}

\define@key{pmdraw@brick}{row sep}{% Sets vertical separation between rows of vertices in brick
    \renewcommand{\pmdraw@rowSep}{#1}%
}
\define@key{pmdraw@brickDefault}{row sep}{% Sets default vertical separation between rows of vertices in brick
    \setkeys{pmdraw@brick}{%
        \savevalue{row sep}=#1%
    }%
}

\define@key{pmdraw@brick}{vertices}{% Sets the draw options of vertices
    \renewcommand{\pmdraw@drawVertexOptions}{#1}%
}
\define@key{pmdraw@brick}{verticesDefault}{% Sets the default draw options of vertices
    \renewcommand{\pmdraw@drawVertexOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{vertices}{% Sets the default draw options of vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{verticesDefault}=#1%
    }%
}

\define@key{pmdraw@brick}{no vertex bottom 0}{% Sets 0th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBz}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 0}{% Sets default 0th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 0}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 1}{% Sets 1st vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBa}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 1}{% Sets default 1st vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 1}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 2}{% Sets 2nd vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBb}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 2}{% Sets default 2nd vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 2}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 3}{% Sets 3rd vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBc}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 3}{% Sets default 3rd vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 3}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 4}{% Sets 4th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBd}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 4}{% Sets default 4th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 4}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 5}{% Sets 5th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBe}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 5}{% Sets default 5th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 5}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 6}{% Sets 6th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBf}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 6}{% Sets default 6th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 6}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 7}{% Sets 7th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBg}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 7}{% Sets default 7th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 7}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 8}{% Sets 8th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBh}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 8}{% Sets default 8th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 8}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 9}{% Sets 9th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBi}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 9}{% Sets default 9th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 9}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 10}{% Sets 10th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBa}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 10}{% Sets default 10th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 10}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 11}{% Sets 11th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBa}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 11}{% Sets default 11th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 11}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 12}{% Sets 12th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBb}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 12}{% Sets default 12th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 12}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 13}{% Sets 13th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBc}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 13}{% Sets default 13th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 13}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 14}{% Sets 14th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBd}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 14}{% Sets default 14th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 14}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 15}{% Sets 15th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBe}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 15}{% Sets default 15th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 15}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 16}{% Sets 16th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBf}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 16}{% Sets default 16th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 16}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 17}{% Sets 17th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBg}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 17}{% Sets default 17th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 17}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 18}{% Sets 18th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBh}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 18}{% Sets default 18th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 18}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex bottom 19}{% Sets 19th vertex to skip in bottom row
    \renewcommand{\pmdraw@drawNoVertexBBi}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex bottom 19}{% Sets default 19th vertex to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex bottom 19}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 0}{% Sets 0th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTz}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 0}{% Sets default 0th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 0}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 1}{% Sets 1st vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTa}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 1}{% Sets default 1st vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 1}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 2}{% Sets 2nd vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTb}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 2}{% Sets default 2nd vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 2}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 3}{% Sets 3rd vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTc}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 3}{% Sets default 3rd vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 3}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 4}{% Sets 4th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTd}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 4}{% Sets default 4th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 4}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 5}{% Sets 5th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTe}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 5}{% Sets default 5th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 5}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 6}{% Sets 6th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTf}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 6}{% Sets default 6th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 6}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 7}{% Sets 7th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTg}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 7}{% Sets default 7th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 7}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 8}{% Sets 8th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTh}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 8}{% Sets default 8th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 8}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 9}{% Sets 9th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTi}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 9}{% Sets default 9th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 9}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 10}{% Sets 10th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTz}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 10}{% Sets default 10th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 10}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 11}{% Sets 11th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTa}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 11}{% Sets default 11th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 11}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 12}{% Sets 12th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTb}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 12}{% Sets default 12th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 12}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 13}{% Sets 13th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTc}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 13}{% Sets default 13th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 13}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 14}{% Sets 14th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTd}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 14}{% Sets default 14th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 14}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 15}{% Sets 15th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTe}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 15}{% Sets default 15th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 15}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 16}{% Sets 16th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTf}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 16}{% Sets default 16th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 16}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 17}{% Sets 17th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTg}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 17}{% Sets default 17th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 17}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 18}{% Sets 18th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTh}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 18}{% Sets default 18th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 18}=#1%
    }%
}
\define@key{pmdraw@brick}{no vertex top 19}{% Sets 19th vertex to skip in top row
    \renewcommand{\pmdraw@drawNoVertexTTi}{#1}%
}
\define@key{pmdraw@brickDefault}{no vertex top 19}{% Sets default 19th vertex to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no vertex top 19}=#1%
    }%
}

\define@key{pmdraw@brick}{ghost vertex bottom 0}{% Sets 0th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBz}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 0}{% Sets default 0th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 0}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 1}{% Sets 1st vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBa}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 1}{% Sets default 1st vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 1}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 2}{% Sets 2nd vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBb}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 2}{% Sets default 2nd vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 2}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 3}{% Sets 3rd vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBc}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 3}{% Sets default 3rd vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 3}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 4}{% Sets 4th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBd}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 4}{% Sets default 4th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 4}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 5}{% Sets 5th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBe}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 5}{% Sets default 5th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 5}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 6}{% Sets 6th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBf}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 6}{% Sets default 6th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 6}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 7}{% Sets 7th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBg}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 7}{% Sets default 7th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 7}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 8}{% Sets 8th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBh}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 8}{% Sets default 8th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 8}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 9}{% Sets 9th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBi}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 9}{% Sets default 9th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 9}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 10}{% Sets 10th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBz}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 10}{% Sets default 10th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 10}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 11}{% Sets 11th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBa}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 11}{% Sets default 11th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 11}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 12}{% Sets 12th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBb}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 12}{% Sets default 12th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 12}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 13}{% Sets 13th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBc}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 13}{% Sets default 13th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 13}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 14}{% Sets 14th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBd}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 14}{% Sets default 14th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 14}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 15}{% Sets 15th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBe}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 15}{% Sets default 15th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 15}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 16}{% Sets 16th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBf}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 16}{% Sets default 16th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 16}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 17}{% Sets 17th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBg}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 17}{% Sets default 17th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 17}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 18}{% Sets 18th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBh}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 18}{% Sets default 18th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 18}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex bottom 19}{% Sets 19th vertex to ghost in bottom row
    \renewcommand{\pmdraw@drawGhostVertexBBi}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex bottom 19}{% Sets default 19th vertex to ghost in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex bottom 19}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 0}{% Sets 0th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTz}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 0}{% Sets default 0th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 0}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 1}{% Sets 1st vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTa}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 1}{% Sets default 1st vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 1}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 2}{% Sets 2nd vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTb}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 2}{% Sets default 2nd vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 2}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 3}{% Sets 3rd vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTc}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 3}{% Sets default 3rd vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 3}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 4}{% Sets 4th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTd}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 4}{% Sets default 4th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 4}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 5}{% Sets 5th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTe}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 5}{% Sets default 5th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 5}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 6}{% Sets 6th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTf}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 6}{% Sets default 6th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 6}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 7}{% Sets 7th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTg}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 7}{% Sets default 7th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 7}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 8}{% Sets 8th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTh}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 8}{% Sets default 8th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 8}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 9}{% Sets 9th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTi}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 9}{% Sets default 9th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 9}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 10}{% Sets 10th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTz}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 10}{% Sets default 10th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 10}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 11}{% Sets 11th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTa}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 11}{% Sets default 11th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 11}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 12}{% Sets 12th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTb}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 12}{% Sets default 12th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 12}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 13}{% Sets 13th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTc}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 13}{% Sets default 13th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 13}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 14}{% Sets 14th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTd}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 14}{% Sets default 14th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 14}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 15}{% Sets 15th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTe}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 15}{% Sets default 15th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 15}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 16}{% Sets 16th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTf}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 16}{% Sets default 16th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 16}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 17}{% Sets 17th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTg}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 17}{% Sets default 17th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 17}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 18}{% Sets 18th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTh}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 18}{% Sets default 18th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 18}=#1%
    }%
}
\define@key{pmdraw@brick}{ghost vertex top 19}{% Sets 19th vertex to ghost in top row
    \renewcommand{\pmdraw@drawGhostVertexTTi}{#1}%
}
\define@key{pmdraw@brickDefault}{ghost vertex top 19}{% Sets default 19th vertex to ghost in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{ghost vertex top 19}=#1%
    }%
}

\define@key{pmdraw@brick}{ghosts}{% Sets the draw options of ghosts
    \renewcommand{\pmdraw@drawGhostOptions}{#1}%
}
\define@key{pmdraw@brick}{ghostsDefault}{% Sets the default draw options of ghosts
    \renewcommand{\pmdraw@drawGhostOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{ghosts}{% Sets the default draw options of ghosts
    \setkeys{pmdraw@brick}{%
        \savevalue{ghostsDefault}=#1%
    }%
}

\define@key{pmdraw@brick}{vertices options}{% Sets the draw command of vertices
    \renewcommand{\pmdraw@drawVertex}[2]{#1}%
}

\define@key{pmdraw@brick}{ghosts options}{% Sets the draw command of ghost vertices
    \renewcommand{\pmdraw@drawVertexGhost}[2]{#1}%
}

\define@key{pmdraw@brick}{labels}[1]{% Draws labels for vertices
    \renewcommand{\pmdraw@ifLabelsB}{#1}%
    \renewcommand{\pmdraw@ifLabelsT}{#1}%
}
\define@key{pmdraw@brickDefault}{labels}[1]{% Sets the default drawing labels for vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels}=#1%
    }%
}
\define@key{pmdraw@brick}{labels bottom}[1]{% Draws labels for bottom vertices
    \renewcommand{\pmdraw@ifLabelsB}{#1}%
}
\define@key{pmdraw@brickDefault}{labels bottom}[1]{% Sets the default drawing labels for bottom vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels bottom}=#1%
    }%
}
\define@key{pmdraw@brick}{labels top}[1]{% Draws labels for top vertices
    \renewcommand{\pmdraw@ifLabelsT}{#1}%
}
\define@key{pmdraw@brickDefault}{labels top}[1]{% Sets the default drawing labels for top vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels top}=#1%
    }%
}

\define@key{pmdraw@brick}{labels start}{% Sets starting number for vertex labels
    \setcounter{pmdraw@labelStartT}{#1}%
    \setcounter{pmdraw@labelStartB}{#1}%
}
\define@key{pmdraw@brickDefault}{labels start}{% Sets the default starting number for vertex labels
    \setkeys{pmdraw@brick}{%
        \savevalue{labels start}=#1%
    }%
}
\define@key{pmdraw@brick}{labels bottom start}{% Sets starting number for bottom vertex labels
    \setcounter{pmdraw@labelStartB}{#1}%
}
\define@key{pmdraw@brickDefault}{labels bottom start}{% Sets the default starting number for bottom vertex labels
    \setkeys{pmdraw@brick}{%
        \savevalue{labels bottom start}=#1%
    }%
}
\define@key{pmdraw@brick}{labels top start}{% Sets starting number for top vertex labels
    \setcounter{pmdraw@labelStartT}{#1}%
}
\define@key{pmdraw@brickDefault}{labels top start}{% Sets the default starting number for top vertex labels
    \setkeys{pmdraw@brick}{%
        \savevalue{labels top start}=#1%
    }%
}

\define@key{pmdraw@brick}{no label bottom 0}{% Sets 0th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBz}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 0}{% Sets the default 0th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 0}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 1}{% Sets 1st label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBa}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 1}{% Sets the default 1st label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 1}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 2}{% Sets 2nd label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBb}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 2}{% Sets the default 2nd label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 2}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 3}{% Sets 3rd label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBc}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 3}{% Sets the default 3rd label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 3}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 4}{% Sets 4th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBd}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 4}{% Sets the default 4th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 4}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 5}{% Sets 5th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBe}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 5}{% Sets the default 5th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 5}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 6}{% Sets 6th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBf}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 6}{% Sets the default 6th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 6}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 7}{% Sets 7th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBg}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 7}{% Sets the default 7th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 7}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 8}{% Sets 8th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBh}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 8}{% Sets the default 8th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 8}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 9}{% Sets 9th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBi}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 9}{% Sets the default 9th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 9}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 10}{% Sets 10th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBz}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 10}{% Sets the default 10th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 10}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 11}{% Sets 11th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBa}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 11}{% Sets the default 11th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 11}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 12}{% Sets 12th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBb}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 12}{% Sets the default 12th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 12}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 13}{% Sets 13th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBc}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 13}{% Sets the default 13th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 13}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 14}{% Sets 14th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBd}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 14}{% Sets the default 14th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 14}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 15}{% Sets 15th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBe}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 15}{% Sets the default 15th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 15}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 16}{% Sets 16th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBf}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 16}{% Sets the default 16th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 16}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 17}{% Sets 17th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBg}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 17}{% Sets the default 17th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 17}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 18}{% Sets 18th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBh}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 18}{% Sets the default 18th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 18}=#1%
    }%
}
\define@key{pmdraw@brick}{no label bottom 19}{% Sets 19th label to skip in bottom row
    \renewcommand{\pmdraw@drawNoLabelBBi}{#1}%
}
\define@key{pmdraw@brickDefault}{no label bottom 19}{% Sets the default 19th label to skip in bottom row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label bottom 19}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 0}{% Sets 0th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTz}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 0}{% Sets the default 0th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 0}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 1}{% Sets 1st label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTa}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 1}{% Sets the default 1st label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 1}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 2}{% Sets 2nd label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTb}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 2}{% Sets the default 2nd label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 2}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 3}{% Sets 3rd label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTc}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 3}{% Sets the default 3rd label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 3}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 4}{% Sets 4th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTd}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 4}{% Sets the default 4th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 4}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 5}{% Sets 5th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTe}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 5}{% Sets the default 5th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 5}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 6}{% Sets 6th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTf}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 6}{% Sets the default 6th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 6}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 7}{% Sets 7th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTg}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 7}{% Sets the default 7th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 7}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 8}{% Sets 8th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTh}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 8}{% Sets the default 8th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 8}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 9}{% Sets 9th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTi}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 9}{% Sets the default 9th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 9}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 10}{% Sets 10th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTz}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 10}{% Sets the default 10th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 10}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 11}{% Sets 11th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTa}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 11}{% Sets the default 11th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 11}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 12}{% Sets 12th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTb}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 12}{% Sets the default 12th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 12}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 13}{% Sets 13th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTc}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 13}{% Sets the default 13th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 13}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 14}{% Sets 14th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTd}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 14}{% Sets the default 14th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 14}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 15}{% Sets 15th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTe}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 15}{% Sets the default 15th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 15}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 16}{% Sets 16th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTf}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 16}{% Sets the default 16th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 16}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 17}{% Sets 17th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTg}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 17}{% Sets the default 17th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 17}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 18}{% Sets 18th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTh}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 18}{% Sets the default 18th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 18}=#1%
    }%
}
\define@key{pmdraw@brick}{no label top 19}{% Sets 19th label to skip in top row
    \renewcommand{\pmdraw@drawNoLabelTTi}{#1}%
}
\define@key{pmdraw@brickDefault}{no label top 19}{% Sets the default 19th label to skip in top row
    \setkeys{pmdraw@brick}{%
        \savevalue{no label top 19}=#1%
    }%
}

\define@key{pmdraw@brick}{labels bottom draw}{% Sets the draw options for labels of bottom vertices
    \renewcommand{\pmdraw@drawLabelBDrawOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{labels bottom draw}{% Sets the default draw options for labels of bottom vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels bottom draw}=#1%
    }%
}
\define@key{pmdraw@brick}{labels bottom node}{% Sets the node options for labels of bottom vertices
    \renewcommand{\pmdraw@drawLabelBNodeOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{labels bottom node}{% Sets the default node options for labels of bottom vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels bottom node}=#1%
    }%
}
\define@key{pmdraw@brick}{labels top draw}{% Sets the draw options for labels of top vertices
    \renewcommand{\pmdraw@drawLabelTDrawOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{labels top draw}{% Sets the default draw options for labels of top vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels top draw}=#1%
    }%
}
\define@key{pmdraw@brick}{labels top node}{% Sets the node options for labels of top vertices
    \renewcommand{\pmdraw@drawLabelTNodeOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{labels top node}{% Sets the default node options for labels of top vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{labels top node}=#1%
    }%
}

\define@key{pmdraw@brick}{labels bottom options}{% Sets the draw command of labels of bottom vertices
    \renewcommand{\pmdraw@drawLabelBottom}[3]{#1}%
}
\define@key{pmdraw@brick}{labels top options}{% Sets the draw command of labels of top vertices
    \renewcommand{\pmdraw@drawLabelTop}[3]{#1}%
}

\define@key{pmdraw@brick}{no dots}[1]{% Does not draw dots in bricks
    \setcounter{pmdraw@ifDiagWDotsFirst}{#1}%
}

\define@key{pmdraw@brick}{dots draw}{% Sets the draw options for drawing of dots
    \renewcommand{\pmdraw@drawDotsDrawOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{dots draw}{% Sets the default draw options for drawing of dots
    \setkeys{pmdraw@brick}{%
        \savevalue{dots draw}=#1%
    }%
}
\define@key{pmdraw@brick}{dots node}{% Sets the node options for drawing of dots
    \renewcommand{\pmdraw@drawDotsNodeOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{dots node}{% Sets the default node options for drawing of dots
    \setkeys{pmdraw@brick}{%
        \savevalue{dots node}=#1%
    }%
}

\define@key{pmdraw@brick}{vertices bottom phantom}[1]{% Does not draw bottom vertices
    \setcounter{pmdraw@ifVerticesBottom}{#1}%
}
\define@key{pmdraw@brickDefault}{vertices bottom phantom}{% Sets the default to not draw bottom vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{vertices bottom phantom}=#1%
    }%
}
\define@key{pmdraw@brick}{vertices top phantom}[1]{% Does not draw top vertices
    \setcounter{pmdraw@ifVerticesTop}{#1}%
}
\define@key{pmdraw@brickDefault}{vertices top phantom}{% Sets the default to not draw top vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{vertices top phantom}=#1%
    }%
}

\define@key{pmdraw@brick}{vertices bottom uncover}{% Sets the uncover options of bottom vertices
    \renewcommand{\pmdraw@verticesBottomUncover}{#1}%
}
\define@key{pmdraw@brickDefault}{vertices bottom uncover}{% Sets the default uncover options of bottom vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{vertices bottom uncover}=#1%
    }%
}
\define@key{pmdraw@brick}{vertices top uncover}{% Sets the uncover options of top vertices
    \renewcommand{\pmdraw@verticesTopUncover}{#1}%
}
\define@key{pmdraw@brickDefault}{vertices top uncover}{% Sets the default uncover options of top vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{vertices top uncover}=#1%
    }%
}

\define@key{pmdraw@brick}{levels}[1]{% Sets number of horizontal levels for non-transversal edges and evenly spaces them
    \tikzmath{%
        \pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge
        \pmdraw{edgeSepL} = \pmdraw{edgeSepU};% Calculates vertical separation between each edge
    }%
}
\define@key{pmdraw@brickDefault}{levels}{% Sets the default number of horizontal levels for non-transversal edges and evenly spaces them
    \setkeys{pmdraw@brick}{%
        \savevalue{levels}=#1%
    }%
}
\define@key{pmdraw@brick}{levels bottom}{% Sets number of horizontal levels for lower non-transversal edges and evenly spaces them
    \tikzmath{%
        \pmdraw{edgeSepL} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge
    }%
}
\define@key{pmdraw@brickDefault}{levels bottom}{% Sets the default number of horizontal levels for lower non-transversal edges and evenly spaces them
    \setkeys{pmdraw@brick}{%
        \savevalue{levels bottom}=#1%
    }%
}
\define@key{pmdraw@brick}{levels top}{% Sets number of horizontal levels for upper non-transversal edges and evenly spaces them
    \tikzmath{%
        \pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge
    }%
}
\define@key{pmdraw@brickDefault}{levels top}{% Sets the default number of horizontal levels for upper non-transversal edges and evenly spaces them
    \setkeys{pmdraw@brick}{%
        \savevalue{levels top}=#1%
    }%
}

\define@key{pmdraw@brick}{levels sep}{% Sets vertical separation of horizontal levels for non-transversal edges
    \tikzmath{%
        \pmdraw{edgeSepU} = #1;%
        \pmdraw{edgeSepL} = \pmdraw{edgeSepU};%
    }%
}
\define@key{pmdraw@brickDefault}{levels sep}{% Sets the default vertical separation of horizontal levels for non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{levels sep}=#1%
    }%
}
\define@key{pmdraw@brick}{levels sep bottom}{% Sets vertical separation of lower horizontal levels for non-transversal edges
    \tikzmath{%
        \pmdraw{edgeSepL} = #1;%
    }%
}
\define@key{pmdraw@brickDefault}{levels sep bottom}{% Sets the default vertical separation of lower horizontal levels for non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{levels sep bottom}=#1%
    }%
}
\define@key{pmdraw@brick}{levels sep top}{% Sets vertical separation of upper horizontal levels for non-transversal edges
    \tikzmath{%
        \pmdraw{edgeSepU} = #1;%
    }%
}
\define@key{pmdraw@brickDefault}{levels sep top}{% Sets the default vertical separation of upper horizontal levels for non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{levels sep top}=#1%
    }%
}

\define@key{pmdraw@brick}{edges}{% Sets the draw options of all edges
    \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1}%
    \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1}%
    \renewcommand{\pmdraw@drawTedgesDrawOptions}{#1}%
}
\define@key{pmdraw@brick}{edgesDefault}{% Sets the default draw options of all edges
    \renewcommand{\pmdraw@drawUedgesDrawOptionsDefault}{#1}%
    \renewcommand{\pmdraw@drawLedgesDrawOptionsDefault}{#1}%
    \renewcommand{\pmdraw@drawTedgesDrawOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{edges}{% Sets the default draw options of all edges
    \setkeys{pmdraw@brick}{%
        \savevalue{edgesDefault}=#1%
    }%
}
\define@key{pmdraw@brick}{edges non-transversal}{% Sets the draw options of non-transversal edges
    \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1}%
    \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1}%
}
\define@key{pmdraw@brick}{edges non-transversalDefault}{% Sets the default draw options of non-transversal edges
    \renewcommand{\pmdraw@drawUedgesDrawOptionsDefault}{#1}%
    \renewcommand{\pmdraw@drawLedgesDrawOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{edges non-transversal}{% Sets the default draw options of non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{edges non-transversalDefault}=#1%
    }%
}
\define@key{pmdraw@brick}{edges upper}{% Sets the draw options of upper non-transversal edges
    \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1}%
}
\define@key{pmdraw@brick}{edges upperDefault}{% Sets the default draw options of upper non-transversal edges
    \renewcommand{\pmdraw@drawUedgesDrawOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{edges upper}{% Sets the default draw options of upper non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{edges upperDefault}=#1%
    }%
}
\define@key{pmdraw@brick}{edges lower}{% Sets the draw options of lower non-transversal edges
    \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1}%
}
\define@key{pmdraw@brick}{edges lowerDefault}{% Sets the defaultdraw options of lower non-transversal edges
    \renewcommand{\pmdraw@drawLedgesDrawOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{edges lower}{% Sets the default draw options of lower non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{edges lowerDefault}=#1%
    }%
}
\define@key{pmdraw@brick}{edges transversal}{% Sets the draw options of transversal edges
    \renewcommand{\pmdraw@drawTedgesDrawOptions}{#1}%
}
\define@key{pmdraw@brick}{edges transversalDefault}{% Sets the default draw options of transversal edges
    \renewcommand{\pmdraw@drawTedgesDrawOptionsDefault}{#1}%
}
\define@key{pmdraw@brickDefault}{edges transversal}{% Sets the default draw options of transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{edges transversalDefault}=#1%
    }%
}

\define@key{pmdraw@brick}{edges first}[1]{% Draws edges before vertices
    \renewcommand{\pmdraw@ifEdgesFirst}{#1}%
}
\define@key{pmdraw@brickDefault}{edges first}{% Sets the default to draw edges before vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{edges first}=#1%
    }%
}
\define@key{pmdraw@brick}{edges last}[1]{% Draws edges after vertices
    % Negate value
    \ifnum#1=1
        \renewcommand{\pmdraw@ifEdgesFirst}{0}%
    \else%
        \renewcommand{\pmdraw@ifEdgesFirst}{1}%
    \fi%
}
\define@key{pmdraw@brickDefault}{edges last}{% Sets the default to draw edges after vertices
    \setkeys{pmdraw@brick}{%
        \savevalue{edges last}=#1%
    }%
}
\define@key{pmdraw@brick}{transversals first}[1]{% Draws transversal edges before non-transversal edges
    \renewcommand{\pmdraw@ifTedgesFirst}{#1}%
}
\define@key{pmdraw@brickDefault}{transversals first}{% Sets the default to draw transversal edges before non-transversal edges
    \setkeys{pmdraw@brick}{%
        \savevalue{transversals first}=#1%
    }%
}

\define@key{pmdraw@brick}{edges phantom}[1]{% Does not draw edges
    \setcounter{pmdraw@ifEdges}{#1}%
}
\define@key{pmdraw@brickDefault}{edges phantom}{% Sets the default to not draw edge
    \setkeys{pmdraw@brick}{%
        \savevalue{edges phantom}=#1%
    }%
}

\define@key{pmdraw@brick}{edges uncover}{% Sets the uncover options of edges
    \renewcommand{\pmdraw@edgesUncover}{#1}%
}
\define@key{pmdraw@brickDefault}{edges uncover}{% Sets the default uncover options of edges
    \setkeys{pmdraw@brick}{%
        \savevalue{edges uncover}=#1%
    }%
}

\define@key{pmdraw@brick}{brace}{% Draws a brace
    \setkeys{pmdraw@brace}{% Sets default keys for brace
        left=\usevalue{left},
        right=\usevalue{right},
        above=\usevalue{above}
    }%
    \setkeys{pmdraw@brace}{#1}% Processes details of brace
    \pmdraw@drawBrace{\value{pmdraw@braceL}}{\value{pmdraw@braceR}}{\pmdraw@braceLabel}% Draws brace
    \let\pmdraw@drawBrace\pmdraw@drawBraceDefault% Resets brace options if changed
}
\define@key{pmdraw@brickDefault}{brace}{% Sets the default brace
    \setkeys{pmdraw@brick}{%
        \savevalue{brace}=#1%
    }%
}

\define@key{pmdraw@brick}{brace draw}{% Sets the draw options for drawing of brace
    \renewcommand{\pmdraw@drawBraceDrawOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{brace draw}{% Sets the default draw options for drawing of brace
    \setkeys{pmdraw@brick}{%
        \savevalue{brace draw}=#1%
    }%
}
\define@key{pmdraw@brick}{brace node}{% Sets the node options for drawing of brace
    \renewcommand{\pmdraw@drawBraceNodeOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{brace node}{% Sets the default node options for drawing of brace
    \setkeys{pmdraw@brick}{%
        \savevalue{brace node}=#1%
    }%
}

\define@key{pmdraw@brick}{bracket}{% Draws a bracket
    \setkeys{pmdraw@bracket}{% Sets default keys for bracket
        left=\usevalue{left},
        right=\usevalue{right},
        sep=\usevalue{sep},
        up=\usevalue{up},
        down=\usevalue{down}
    }%
    \setkeys{pmdraw@bracket}{#1}% Processes details of bracket
    \pmdraw@drawBracket{\pmdraw@bracketLabel}% Draws bracket
    \let\pmdraw@drawBracket\pmdraw@drawBracketDefault% Resets bracket options if changed
}
\define@key{pmdraw@brickDefault}{bracket}{% Sets the default bracket
    \setkeys{pmdraw@brick}{%
        \savevalue{bracket}=#1%
    }%
}

\define@key{pmdraw@brick}{bracket draw}{% Sets the draw options for drawing of bracket
    \renewcommand{\pmdraw@drawBracketDrawOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{bracket draw}{% Sets the default draw options for drawing of bracket
    \setkeys{pmdraw@brick}{%
        \savevalue{bracket draw}=#1%
    }%
}
\define@key{pmdraw@brick}{bracket node}{% Sets the node options for drawing of bracket
    \renewcommand{\pmdraw@drawBracketNodeOptions}{#1}%
}
\define@key{pmdraw@brickDefault}{bracket node}{% Sets the default node options for drawing of bracket
    \setkeys{pmdraw@brick}{%
        \savevalue{bracket node}=#1%
    }%
}

\define@key{pmdraw@brick}{decorate before}{% Hook for decorations before brick is drawn
    \renewcommand{\pmdraw@hookBeforeBrick}{#1}%
}
\define@key{pmdraw@brickDefault}{decorate before}{% Sets the default hook for decorations before brick is drawn
    \setkeys{pmdraw@brick}{%
        \savevalue{decorate before}=#1%
    }%
}
\define@key{pmdraw@brick}{decorate after}{% Hook for decorations after brick is drawn
    \renewcommand{\pmdraw@hookAfterBrick}{#1}%
}
\define@key{pmdraw@brickDefault}{decorate after}{% Sets the default hook for decorations after brick is drawn
    \setkeys{pmdraw@brick}{%
        \savevalue{decorate after}=#1%
    }%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Keys for edges                                        %
%   - ordered as per manual                              %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\define@key{pmdraw@NTedges}{level}{% Sets level of non-transversal edge
    \setcounter{pmdraw@NTlevel}{#1}%
}
\define@key{pmdraw@NTedgesDefault}{level}{% Sets the default level of non-transversal edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{level}=#1%
    }%
}

\define@key{pmdraw@NTedges}{height}{% Sets manual height of non-transversal edge
    \renewcommand{\pmdraw@NTedgesHeight}{#1}%
}
\define@key{pmdraw@NTedgesDefault}{height}{% Sets the default manual height of non-transversal edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{height}=#1%
    }%
}

\define@key{pmdraw@NTedges}{radius}{% Sets radius of arc of non-transversal edge
    \renewcommand{\pmdraw@drawEdgeRadius}{#1}%
    \renewcommand{\pmdraw@ifRadiusChange}{1}%
}

\define@key{pmdraw@NTedges}{label}{% Sets label of non-transversal edge
    \renewcommand{\pmdraw@NTedgeLabel}{#1}% Sets label
}
\define@key{pmdraw@NTedgesDefault}{label}{% Sets the default label of non-transversal edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{label}=#1%
    }%
}

\define@key{pmdraw@NTedges}{label node}{% Sets the node options for label of edge
    \renewcommand{\pmdraw@drawEdgeLabelOptions}{#1}%
}
\define@key{pmdraw@NTedgesDefault}{label node}{% Sets the default node options for label of edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{label node}=#1%
    }%
}

\define@key{pmdraw@NTedges}{edge draw}{% Sets the draw options for drawing of edge
    \renewcommand{\pmdraw@drawEdgeDrawOptions}{#1}%
}
\define@key{pmdraw@NTedgesDefault}{edge draw}{% Sets the default draw options for drawing of edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{edge draw}=#1%
    }%
}

\define@key{pmdraw@NTedges}{fill}{% Sets the fill options for drawing of edge
    \renewcommand{\pmdraw@drawEdgeFill}{#1}%
    \if\relax#1\relax\else% If there is a fill
        \renewcommand{\pmdraw@ifEdgesFill}{1}% Sets that edges are filled
    \fi
}
\define@key{pmdraw@NTedgesDefault}{fill}{% Sets the default fill options for drawing of edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{fill}=#1%
    }%
}

\define@key{pmdraw@NTedges}{options}{% Sets the draw command of non-transversal edge
    \renewcommand{\pmdraw@drawUedgesDraw}[2]{#1}%
    \renewcommand{\pmdraw@drawLedgesDraw}[2]{#1}%
}

\define@key{pmdraw@NTedges}{phantom}[1]{% Does not draw edge
    \setcounter{pmdraw@ifEdge}{#1}%
}
\define@key{pmdraw@NTedgesDefault}{phantom}{% Sets the default to not draw edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{phantom}=#1%
    }%
}

\define@key{pmdraw@NTedges}{uncover}{% Sets the uncover options of edge
    \renewcommand{\pmdraw@edgeUncover}{#1}%
}
\define@key{pmdraw@NTedgesDefault}{uncover}{% Sets the default uncover options of edge
    \setkeys{pmdraw@NTedges}{%
        \savevalue{uncover}=#1%
    }%
}

\define@key{pmdraw@Tedges}{height}{% Sets manual height of transversal edge
    \tikzmath{%
        \pmdraw{Tlevel} = #1;%
    }%
    \renewcommand{\pmdraw@ifTedgeHorizontal}{1}% Flags manual height
}
\define@key{pmdraw@TedgesDefault}{height}{% Sets the default manual height of transversal edge
    \setkeys{pmdraw@Tedges}{%
        \savevalue{height}=#1%
    }%
}

\define@key{pmdraw@Tedges}{radius}{% Sets radius of arc of transversal edge
    \renewcommand{\pmdraw@drawEdgeRadiusLeft}{#1}%
    \renewcommand{\pmdraw@drawEdgeRadiusRight}{#1}%
    \renewcommand{\pmdraw@ifRadiusChange}{1}%
}
\define@key{pmdraw@Tedges}{radius left}{% Sets radius of left arc of transversal edge
    \renewcommand{\pmdraw@drawEdgeRadiusLeft}{#1}%
    \renewcommand{\pmdraw@ifRadiusChange}{1}%
}
\define@key{pmdraw@Tedges}{radius right}{% Sets radius of right arc of transversal edge
    \renewcommand{\pmdraw@drawEdgeRadiusRight}{#1}%
    \renewcommand{\pmdraw@ifRadiusChange}{1}%
}

\define@key{pmdraw@Tedges}{label}{% Sets label of transversal edge
    \renewcommand{\pmdraw@TedgeLabel}{#1}% Sets label
}
\define@key{pmdraw@TedgesDefault}{label}{% Sets the default label of transversal edge
    \setkeys{pmdraw@Tedges}{%
        \savevalue{label}=#1%
    }%
}

\define@key{pmdraw@Tedges}{label node}{% Sets the node options for label of edge
    \renewcommand{\pmdraw@drawEdgeLabelOptions}{#1}%
}
\define@key{pmdraw@TedgesDefault}{label node}{% Sets the default node options for label of edge
    \setkeys{pmdraw@Tedges}{%
        \savevalue{label node}=#1%
    }%
}

\define@key{pmdraw@Tedges}{edge draw}{% Sets the draw options for drawing of edge
    \renewcommand{\pmdraw@drawEdgeDrawOptions}{#1}%
}
\define@key{pmdraw@TedgesDefault}{edge draw}{% Sets the default draw options for drawing of edge
    \setkeys{pmdraw@Tedges}{%
        \savevalue{edge draw}=#1%
    }%
}

\define@key{pmdraw@Tedges}{options}{% Sets the draw command of transversal edge
    \renewcommand{\pmdraw@drawTedgesDraw}[2]{#1}%
}

\define@key{pmdraw@Tedges}{phantom}[1]{% Does not draw edge
    \setcounter{pmdraw@ifEdge}{#1}%
}
\define@key{pmdraw@TedgesDefault}{phantom}{% Sets the default to not draw edge
    \setkeys{pmdraw@Tedges}{%
        \savevalue{phantom}=#1%
    }%
}

\define@key{pmdraw@Tedges}{uncover}{% Sets the uncover options of edge
    \renewcommand{\pmdraw@edgeUncover}{#1}%
}
\define@key{pmdraw@TedgesDefault}{uncover}{% Sets the default uncover options of edge
    \setkeys{pmdraw@Tedges}{%
        \savevalue{uncover}=#1%
    }%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Keys for brace                                        %
%   - ordered as per manual                              %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\define@key{pmdraw@brace}{left}{% Sets starting position of brace
    \setcounter{pmdraw@braceL}{#1}%
}
\define@key{pmdraw@braceDefault}{left}{% Sets the default starting position of brace
    \setkeys{pmdraw@brace}{%
        \savevalue{left}=#1%
    }%
}

\define@key{pmdraw@brace}{right}{% Sets terminating position of brace
    \setcounter{pmdraw@braceR}{#1}%
}
\define@key{pmdraw@braceDefault}{right}{% Sets the default terminating position of brace
    \setkeys{pmdraw@brace}{%
        \savevalue{right}=#1%
    }%
}

\define@key{pmdraw@brace}{label}{% Sets label of brace
    \renewcommand{\pmdraw@braceLabel}{#1}%
}

\define@key{pmdraw@brace}{above}[1]{% Set flag to draw brace above diagram
    \renewcommand{\pmdraw@ifProdDiag}{#1}%
}
\define@key{pmdraw@braceDefault}{above}{% Sets the default flag to draw brace above diagram
    \setkeys{pmdraw@brace}{%
        \savevalue{above}=#1%
    }%
}

\define@key{pmdraw@brace}{options}{% Sets the draw command of brace
    \renewcommand{\pmdraw@drawBrace}[3]{#1}%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Keys for bracket                                      %
%   - ordered as per manual                              %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\define@key{pmdraw@bracket}{label}{% Sets label of bracket
    \renewcommand{\pmdraw@bracketLabel}{#1}%
}

\define@key{pmdraw@bracket}{left}[1]{% Sets position of bracket to be on left of brick
    \renewcommand{\pmdraw@ifBracketLeft}{#1}%
}
\define@key{pmdraw@bracketDefault}{left}[1]{% Sets the default position of bracket to be on left of brick
    \setkeys{pmdraw@bracket}{%
        \savevalue{left}=#1%
    }%
}

\define@key{pmdraw@bracket}{right}[0]{% Sets position of bracket to be on right of brick
    \renewcommand{\pmdraw@ifBracketLeft}{#1}%
}
\define@key{pmdraw@bracketDefault}{right}[0]{% Sets the default position of bracket to be on right of brick
    \setkeys{pmdraw@bracket}{%
        \savevalue{right}=#1%
    }%
}

\define@key{pmdraw@bracket}{shift}{% Sets the manual horizontal shift of bracket
    \renewcommand{\pmdraw@BracketShift}{#1}%
}
\define@key{pmdraw@bracketDefault}{shift}{% Sets the default manual horizontal shift of bracket
    \setkeys{pmdraw@bracket}{%
        \savevalue{shift}=#1%
    }%
}

\define@key{pmdraw@bracket}{sep}{% Sets the separation of bracket and brick
    \renewcommand{\pmdraw@BracketSep}{#1}%
}
\define@key{pmdraw@bracketDefault}{sep}{% Sets the default separation of bracket and brick
    \setkeys{pmdraw@bracket}{%
        \savevalue{sep}=#1%
    }%
}

\define@key{pmdraw@bracket}{up}{% Extends the bracket upwards
    \renewcommand{\pmdraw@BracketShiftUp}{#1}%
}
\define@key{pmdraw@bracketDefault}{up}{% Sets the default of bracket upwards
    \setkeys{pmdraw@bracket}{%
        \savevalue{up}=#1%
    }%
}

\define@key{pmdraw@bracket}{down}{% Extends the bracket downwards
    \renewcommand{\pmdraw@BracketShiftDown}{#1}%
}
\define@key{pmdraw@bracketDefault}{down}{% Sets the default of bracket downwards
    \setkeys{pmdraw@bracket}{%
        \savevalue{down}=#1%
    }%
}

\define@key{pmdraw@bracket}{options}{% Sets the draw command of bracket
    \renewcommand{\pmdraw@drawBracket}[1]{#1}%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Keys for diagrams and product diagrams                %
%   - ordered as per manual                              %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\define@key{pmdraw@diagram}{row sep}{% Sets vertical separation between rows of vertices in diagram
    \renewcommand{\pmdraw@rowSep}{#1}%
}
\define@key{pmdraw@diagramDefault}{row sep}{% Sets the default vertical separation between rows of vertices in diagram
    \setkeys{pmdraw@diagram}{%
        \savevalue{row sep}=#1%
    }%
}

\define@key{pmdraw@diagram}{tikz}{% Sets the tikz options
    \renewcommand{\pmdraw@tikz}{#1}%
}
\define@key{pmdraw@diagramDefault}{tikz}{% Sets the default tikz options
    \setkeys{pmdraw@diagram}{%
        \savevalue{tikz}=#1%
    }%
}

\define@key{pmdraw@diagram}{dots options}{% Sets the draw command of dots between bricks
    \renewcommand{\pmdraw@drawDots}[2]{#1}%
}


\define@key{pmdraw@diagram}{grid}[1]{% Flag for drawing coordinate grid
    \renewcommand{\pmdraw@ifGrid}{#1}%
}
\define@key{pmdraw@diagramDefault}{grid}{% Sets the default flag for drawing coordinate grid
    \setkeys{pmdraw@diagram}{%
        \savevalue{grid}=#1%
    }%
}

\define@key{pmdraw@diagram}{decorate before}{% Hook before drawing diagrams
    \renewcommand{\pmdraw@hookBeforeDiagram}{#1}%
}
\define@key{pmdraw@diagramDefault}{decorate before}{% Sets the default hook before drawing diagrams
    \setkeys{pmdraw@diagram}{%
        \savevalue{decorate before}=#1%
    }%
}
\define@key{pmdraw@diagram}{decorate after}{% Hook after drawing diagrams
    \renewcommand{\pmdraw@hookAfterDiagram}{#1}%
}
\define@key{pmdraw@diagramDefault}{decorate after}{% Sets the default hook after drawing diagrams
    \setkeys{pmdraw@diagram}{%
        \savevalue{decorate after}=#1%
    }%
}

\define@key{pmdraw@diagram}{diagram sep}{% Sets vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram
    \renewcommand{\pmdraw@diagSep}{#1}%
}
\define@key{pmdraw@diagramDefault}{diagram sep}{% Sets the default vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram
    \setkeys{pmdraw@diagram}{%
        \savevalue{diagram sep}=#1%
    }%
}
\define@key{pmdraw@diagram}{vertex sep}{% Sets vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram not for added edges
    \renewcommand{\pmdraw@vertexSep}{#1}%
}
\define@key{pmdraw@diagramDefault}{vertex sep}{% Sets the default vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram not for added edges
    \setkeys{pmdraw@diagram}{%
        \savevalue{vertex sep}=#1%
    }%
}

\define@key{pmdraw@diagram}{edges added}{% Sets the draw options for drawing of added edges in product diagram
    \renewcommand{\pmdraw@drawAedgesOptions}{#1}%
}
\define@key{pmdraw@diagram}{edges addedDefault}{% Sets the default draw options for drawing of added edges in product diagram
    \renewcommand{\pmdraw@drawAedgesOptionsDefault}{#1}%
}
\define@key{pmdraw@diagramDefault}{edges added}{% Sets the default draw options for drawing of added edges in product diagram
    \setkeys{pmdraw@diagram}{%
        \savevalue{edges addedDefault}=#1%
    }%
}
\define@key{pmdraw@diagram}{edges added phantom}[1]{% Does not draw added edges
    \setcounter{pmdraw@ifEdgesAdded}{#1}%
}
\define@key{pmdraw@diagramDefault}{edges added phantom}{% Sets the default to not draw added edges
    \setkeys{pmdraw@diagram}{%
        \savevalue{edges added phantom}=#1%
    }%
}
\define@key{pmdraw@diagram}{edges added uncover}{% Sets the uncover options of added edges
    \renewcommand{\pmdraw@edgesAddedUncover}{#1}%
}
\define@key{pmdraw@diagramDefault}{edges added uncover}{% Sets the default uncover options of added edges
    \setkeys{pmdraw@diagram}{%
        \savevalue{edges added uncover}=#1%
    }%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Keys for default key settings                         %
%   - ordered as per manual                              %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\define@key{pmdraw@default}{brick}{% Sets the default key options of brick keys
    \setkeys{pmdraw@brickDefault}{#1}%
}

\define@key{pmdraw@default}{NTedges}{% Sets the default key options of non-transversal edge keys
    \setkeys{pmdraw@NTedgesDefault}{#1}%
}

\define@key{pmdraw@default}{Tedges}{% Sets the default key options of transversal edge keys
    \setkeys{pmdraw@TedgesDefault}{#1}%
}

\define@key{pmdraw@default}{brace}{% Sets the default key options of brace keys
    \setkeys{pmdraw@braceDefault}{#1}%
}

\define@key{pmdraw@default}{bracket}{% Sets the default key options of bracket keys
    \setkeys{pmdraw@bracketDefault}{#1}%
}

\define@key{pmdraw@default}{diagram}{% Sets the default key options of diagram keys
    \setkeys{pmdraw@diagramDefault}{#1}%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  User commands                                         %
%   - loosely ordered alphabetically                     %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\pmdBrick}[4][]{% Draws brick
    % #1 Options
    % #2 Upper non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3}
    % #3 Lower non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3}
    % #4 Transversals, as list [<options>]{<upper vertex>}{<lower vertex>}, eg [level=1]{2}{3}
    \pmdDiagram{{[#1]{#2}{#3}{#4}}}% Uses complete diagram method to draw brick
}

\newcommand{\pmdDiagram}[2][]{% Draws diagram
    % #1 Options
    % #2 List of bricks
    \setkeys{pmdraw@diagram}{% Sets default key values for diagrams
        row sep=\usevalue{row sep},
        tikz=\usevalue{tikz},
        grid=\usevalue{grid},
        decorate before=\usevalue{decorate before},
        decorate after=\usevalue{decorate after},
        diagram sep=\usevalue{diagram sep},
        vertex sep=\usevalue{vertex sep},
        edges added phantom=\usevalue{edges added phantom},
        edges added uncover=\usevalue{edges added uncover}
    }%
    \setkeys{pmdraw@diagram}{#1}% Processes options
    \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dots
    \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
    \ifmmode% If drawing diagram in a maths equation
        \,% Add space
        \ifnum\pmdraw@ifGrid=1% If displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
        \else% If not displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=0.405cm,apply style/.expand once=\pmdraw@tikz]%
        \fi%
            \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
            \pmdraw@bricksLoop% Commences loop for each brick to be drawn
            #2%
            \pmdEmpty% Terminates loop
            \pmdraw@hookAfterDiagram% Hook after drawing diagrams
        \end{tikzpicture}%
        \,% Add space
    \else% If drawing diagram in normal text
        \raisebox{0.5cm}{% Raise diagram so bottom row is on text baseline
            \ifnum\pmdraw@ifGrid=1% If displaying helper grid
                \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
            \else% If not displaying helper grid
                \begin{tikzpicture}[scale=.5,baseline=0.405cm,apply style/.expand once=\pmdraw@tikz]%
            \fi%
                \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
                \pmdraw@bricksLoop% Commences loop for each brick to be drawn
                #2%
                \pmdEmpty% Terminates loop
                \pmdraw@hookAfterDiagram% Hook after drawing diagrams
            \end{tikzpicture}%
        }%
    \fi%
    \pmdraw@reset% Resets user keys and other flags to default values
}

\newcommand{\pmdEmpty}{}% Indicates no edges, internally halts input loops, always is = {}

\newcommand{\pmdEquiv}[2][]{% Draws equivalence relation
    % #1 Options
    % #2 List of equivalence bricks
    \setkeys{pmdraw@diagram}{% Sets default key values for diagrams
        row sep=\usevalue{row sep},
        tikz=\usevalue{tikz},
        grid=\usevalue{grid},
        decorate before=\usevalue{decorate before},
        decorate after=\usevalue{decorate after},
        diagram sep=\usevalue{diagram sep},
        vertex sep=\usevalue{vertex sep},
        edges added phantom=\usevalue{edges added phantom},
        edges added uncover=\usevalue{edges added uncover}
    }%
    \setkeys{pmdraw@diagram}{#1}% Processes options
    \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dots
    \renewcommand{\pmdraw@ifEquiv}{1}% Flags that drawing an equivalence relation
    \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual E bricks
    \ifmmode% If drawing diagram in a maths equation
        \,% Add space
        \ifnum\pmdraw@ifGrid=1% If displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=0.905cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
        \else% If not displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=0.905cm,apply style/.expand once=\pmdraw@tikz]%
        \fi%
            \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
            \pmdraw@bricksLoopE% Commences loop for each E brick to be drawn
            #2%
            \pmdEmpty% Terminates loop
            \pmdraw@hookAfterDiagram% Hook after drawing diagrams
        \end{tikzpicture}%
        \,% Add space
    \else% If drawing diagram in normal text
        \ifnum\pmdraw@ifGrid=1% If displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=0.905cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
        \else% If not displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=0.905cm,apply style/.expand once=\pmdraw@tikz]%
        \fi%
            \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
            \pmdraw@bricksLoopE% Commences loop for each E brick to be drawn
            #2%
            \pmdEmpty% Terminates loop
            \pmdraw@hookAfterDiagram% Hook after drawing diagrams
        \end{tikzpicture}%
    \fi%
    \pmdraw@reset% Resets user keys and other flags to default values
}

\newcommand{\pmdProduct}[4][]{% Draws product diagram
    % #1 Options
    % #2 List of added edges
    % #3 Top diagram as list of bricks
    % #4 Bottom diagram as list of bricks
    \setkeys{pmdraw@diagram}{% Sets default key values for diagrams
        row sep=\usevalue{row sep},
        tikz=\usevalue{tikz},
        grid=\usevalue{grid},
        decorate before=\usevalue{decorate before},
        decorate after=\usevalue{decorate after},
        diagram sep=\usevalue{diagram sep},
        vertex sep=\usevalue{vertex sep},
        edges added phantom=\usevalue{edges added phantom},
        edges added uncover=\usevalue{edges added uncover}
    }%
    \setkeys{pmdraw@diagram}{#1}% Processes options
    \ifmmode% If drawing diagram in a maths equation
        \,% Add space
        \ifnum\pmdraw@ifGrid=1% If displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=-.3475cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
        \else% If not displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=-.3475cm,apply style/.expand once=\pmdraw@tikz]%
        \fi%
            \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
            \pmdraw@AedgesLoop% Commences loop for added edges to be drawn
            #2%
            \pmdEmpty% Terminates loop
            \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot
            \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product
            \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
            \pmdraw@bricksLoop% Commences loop for each brick to be drawn
            #3%
            \pmdEmpty% Terminates loop
            \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product
            \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
            \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
            \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram
                \pmdraw@bricksLoop% Commences loop for each brick to be drawn
                #4%
                \pmdEmpty% Terminates loop
                \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots
                \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
            \end{scope}%
            \pmdraw@hookAfterDiagram% Hook after drawing diagrams
        \end{tikzpicture}%
        \,% Add space
    \else% If drawing diagram in normal text
        \raisebox{2cm}{% Raise diagram so bottom row is on text baseline
            \ifnum\pmdraw@ifGrid=1% If displaying helper grid
                \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
            \else% If not displaying helper grid
                \begin{tikzpicture}[scale=.5,baseline=0.405cm,apply style/.expand once=\pmdraw@tikz]%
            \fi%
                \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
                \pmdraw@AedgesLoop% Commences loop for added edges to be drawn
                #2%
                \pmdEmpty% Terminates loop
                \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot
                \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product
                \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                \pmdraw@bricksLoop% Commences loop for each brick to be drawn
                #3%
                \pmdEmpty% Terminates loop
                \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is products
                \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
                \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram
                    \pmdraw@bricksLoop% Commences loop for each brick to be drawn
                    #4%
                    \pmdEmpty% Terminates loop
                    \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots
                    \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
                \end{scope}%
                \pmdraw@hookAfterDiagram% Hook after drawing diagrams diagram
            \end{tikzpicture}%
        }%
    \fi%
    \pmdraw@reset% Resets user keys and other flags to default values
}

\newcommand{\pmdProductTriple}[6][]{% Draws triple product diagram
    % #1 Options
    % #2 List of top added edges
    % #3 List of bottom added edges
    % #4 Top diagram as list of bricks
    % #5 Middle diagram as list of bricks
    % #6 Bottom diagram as list of bricks
    \setkeys{pmdraw@diagram}{% Sets default key values for diagrams
        row sep=\usevalue{row sep},
        tikz=\usevalue{tikz},
        grid=\usevalue{grid},
        decorate before=\usevalue{decorate before},
        decorate after=\usevalue{decorate after},
        diagram sep=\usevalue{diagram sep},
        vertex sep=\usevalue{vertex sep},
        edges added phantom=\usevalue{edges added phantom},
        edges added uncover=\usevalue{edges added uncover}
    }%
    \setkeys{pmdraw@diagram}{#1}% Processes options
    \ifmmode% If drawing diagram in a maths equation
        \,% Add space
        \ifnum\pmdraw@ifGrid=1% If displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=-1.0975cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
        \else% If not displaying helper grid
            \begin{tikzpicture}[scale=.5,baseline=-1.0975cm,apply style/.expand once=\pmdraw@tikz]%
        \fi%
            \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
            \pmdraw@AedgesLoop% Commences loop for top added edges to be drawn
            #2%
            \pmdEmpty% Terminates loop
            \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot
            \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product
            \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
            \pmdraw@bricksLoop% Commences loop for each top brick to be drawn
            #4%
            \pmdEmpty% Terminates loop
            \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product
            \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
            \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
            \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram
                \pmdraw@AedgesLoop% Commences loop for bottom added edges to be drawn
                #3%
                \pmdEmpty% Terminates loop
                \pmdraw@bricksLoop% Commences loop for each middle brick to be drawn
                #5%
                \pmdEmpty% Terminates loop
                \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
                \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath middle diagram
                    \pmdraw@bricksLoop% Commences loop for each bottom brick to be drawn
                    #6%
                    \pmdEmpty% Terminates loop
                    \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                \end{scope}%
            \end{scope}%
            \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots
            \pmdraw@hookAfterDiagram% Hook after drawing diagrams
        \end{tikzpicture}%
        \,% Add space
    \else% If drawing diagram in normal text
        \raisebox{2cm}{% Raise diagram so bottom row is on text baseline
            \ifnum\pmdraw@ifGrid=1% If displaying helper grid
                \begin{tikzpicture}[scale=.5,baseline=-1.095cm,show grid=true,apply style/.expand once=\pmdraw@tikz]%
            \else% If not displaying helper grid
                \begin{tikzpicture}[scale=.5,baseline=-1.095cm,apply style/.expand once=\pmdraw@tikz]%
            \fi%
                \pmdraw@hookBeforeDiagram% Hook before drawing diagrams
                \pmdraw@AedgesLoop% Commences loop for added edges to be drawn
                #2%
                \pmdEmpty% Terminates loop
                \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot
                \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product
                \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                \pmdraw@bricksLoop% Commences loop for each brick to be drawn
                #4%
                \pmdEmpty% Terminates loop
                \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product
                \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
                \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath top diagram
                    \pmdraw@AedgesLoop% Commences loop for bottom added edges to be drawn
                    #3%
                    \pmdEmpty% Terminates loop
                    \pmdraw@bricksLoop% Commences loop for each middle brick to be drawn
                    #5%
                    \pmdEmpty% Terminates loop
                    \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
                    \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                    \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep-\pmdraw@vertexSep)}]% Shift coordinates to be underneath middle diagram
                        \pmdraw@bricksLoop% Commences loop for each bottom brick to be drawn
                        #6%
                        \pmdEmpty% Terminates loop
                        \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks
                    \end{scope}%
                \end{scope}%
                \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots
                \pmdraw@hookAfterDiagram% Hook after drawing diagrams
            \end{tikzpicture}%
        }%
    \fi%
    \pmdraw@reset% Resets user keys and other flags to default values
}

\newcommand{\pmdSetDefault}[1]{% Sets the entered styles as the default
    \setkeys{pmdraw@default}{#1}%
}

\newcommand{\pmdSetToOriginalDefault}{% Sets the styles as the default of the package
    \setkeys{pmdraw@default}{% Saves values
        brick={% Sets default for brick keys
            degree=0,
            degree bottom=0,
            degree top=0,
            blank bottom=0,
            blank top=0,
            row sep=2,
            no vertex bottom 0=-1,
            no vertex bottom 1=-1,
            no vertex bottom 2=-1,
            no vertex bottom 3=-1,
            no vertex bottom 4=-1,
            no vertex bottom 5=-1,
            no vertex bottom 6=-1,
            no vertex bottom 7=-1,
            no vertex bottom 8=-1,
            no vertex bottom 9=-1,
            no vertex bottom 10=-1,
            no vertex bottom 11=-1,
            no vertex bottom 12=-1,
            no vertex bottom 13=-1,
            no vertex bottom 14=-1,
            no vertex bottom 15=-1,
            no vertex bottom 16=-1,
            no vertex bottom 17=-1,
            no vertex bottom 18=-1,
            no vertex bottom 19=-1,
            no vertex top 0=-1,
            no vertex top 1=-1,
            no vertex top 2=-1,
            no vertex top 3=-1,
            no vertex top 4=-1,
            no vertex top 5=-1,
            no vertex top 6=-1,
            no vertex top 7=-1,
            no vertex top 8=-1,
            no vertex top 9=-1,
            no vertex top 10=-1,
            no vertex top 11=-1,
            no vertex top 12=-1,
            no vertex top 13=-1,
            no vertex top 14=-1,
            no vertex top 15=-1,
            no vertex top 16=-1,
            no vertex top 17=-1,
            no vertex top 18=-1,
            no vertex top 19=-1,
            ghost vertex bottom 0=-1,
            ghost vertex bottom 1=-1,
            ghost vertex bottom 2=-1,
            ghost vertex bottom 3=-1,
            ghost vertex bottom 4=-1,
            ghost vertex bottom 5=-1,
            ghost vertex bottom 6=-1,
            ghost vertex bottom 7=-1,
            ghost vertex bottom 8=-1,
            ghost vertex bottom 9=-1,
            ghost vertex bottom 10=-1,
            ghost vertex bottom 11=-1,
            ghost vertex bottom 12=-1,
            ghost vertex bottom 13=-1,
            ghost vertex bottom 14=-1,
            ghost vertex bottom 15=-1,
            ghost vertex bottom 16=-1,
            ghost vertex bottom 17=-1,
            ghost vertex bottom 18=-1,
            ghost vertex bottom 19=-1,
            ghost vertex top 0=-1,
            ghost vertex top 1=-1,
            ghost vertex top 2=-1,
            ghost vertex top 3=-1,
            ghost vertex top 4=-1,
            ghost vertex top 5=-1,
            ghost vertex top 6=-1,
            ghost vertex top 7=-1,
            ghost vertex top 8=-1,
            ghost vertex top 9=-1,
            ghost vertex top 10=-1,
            ghost vertex top 11=-1,
            ghost vertex top 12=-1,
            ghost vertex top 13=-1,
            ghost vertex top 14=-1,
            ghost vertex top 15=-1,
            ghost vertex top 16=-1,
            ghost vertex top 17=-1,
            ghost vertex top 18=-1,
            ghost vertex top 19=-1,
            labels=0,
            labels bottom=0,
            labels top=0,
            labels start=1,
            labels bottom start=1,
            labels top start=1,
            no label bottom 0=-1,
            no label bottom 1=-1,
            no label bottom 2=-1,
            no label bottom 3=-1,
            no label bottom 4=-1,
            no label bottom 5=-1,
            no label bottom 6=-1,
            no label bottom 7=-1,
            no label bottom 8=-1,
            no label bottom 9=-1,
            no label bottom 10=-1,
            no label bottom 11=-1,
            no label bottom 12=-1,
            no label bottom 13=-1,
            no label bottom 14=-1,
            no label bottom 15=-1,
            no label bottom 16=-1,
            no label bottom 17=-1,
            no label bottom 18=-1,
            no label bottom 19=-1,
            no label top 0=-1,
            no label top 1=-1,
            no label top 2=-1,
            no label top 3=-1,
            no label top 4=-1,
            no label top 5=-1,
            no label top 6=-1,
            no label top 7=-1,
            no label top 8=-1,
            no label top 9=-1,
            no label top 10=-1,
            no label top 11=-1,
            no label top 12=-1,
            no label top 13=-1,
            no label top 14=-1,
            no label top 15=-1,
            no label top 16=-1,
            no label top 17=-1,
            no label top 18=-1,
            no label top 19=-1,
            labels bottom draw={},
            labels bottom node={},
            labels top draw={},
            labels top node={},
            dots draw={},
            dots node={},
            vertices bottom phantom=0,
            vertices top phantom=0,
            vertices bottom uncover={1-},
            vertices top uncover={1-},
            levels=1,
            levels bottom=1,
            levels top=1,
            levels sep=(0.5*\pmdraw@rowSep)/2,
            levels sep bottom=(0.5*\pmdraw@rowSep)/2,
            levels sep top=(0.5*\pmdraw@rowSep)/2,
            edges first=1,
            edges last=0,
            transversals first=0,
            edges phantom=0,
            edges uncover={1-},
            brace draw={},
            brace node={},
            bracket draw={},
            bracket node={},
            decorate before={},
            decorate after={}
        }
    }
    \setkeys{pmdraw@default}{% Saves values
        NTedges={% Sets default for non-transversal edge keys
            level=1,
            height=-1000,
            edge draw={},
            fill={},
            phantom=0,
            uncover={1-},
            label={},
            label node={}
        }
    }
    \setkeys{pmdraw@default}{% Saves values
        Tedges={% Sets default for transversal edge keys
            edge draw={},
            phantom=0,
            uncover={1-},
            label={},
            label node={}
        }
    }
    \setkeys{pmdraw@default}{% Saves values
        brace={% Sets default for brace keys
            left=0,
            right=0,
            above=0
        }
    }
    \setkeys{pmdraw@default}{% Saves values
        bracket={% Sets default for bracket keys
            left=1,
            right=1,
            shift=0,
            sep=0.7,
            up=0,
            down=0
        }
    }
    \setkeys{pmdraw@default}{% Saves values
        diagram={% Sets default for diagram keys
            row sep=2,
            tikz={},
            grid=0,
            decorate before={},
            decorate after={},
            diagram sep=1,
            vertex sep=0,
            edges added phantom=0,
            edges added uncover={1-}
        }
    }
    \renewcommand{\pmdraw@drawVertexOptionsDefault}{}% Resets default draw options for vertices
    \renewcommand{\pmdraw@drawGhostOptionsDefault}{}% Resets default draw options for vertices
    \renewcommand{\pmdraw@drawLedgesDrawOptionsDefault}{}% Resets default draw options for lower non-transversal edges
    \renewcommand{\pmdraw@drawUedgesDrawOptionsDefault}{}% Resets default draw options for upper non-transversal edges
    \renewcommand{\pmdraw@drawTedgesDrawOptionsDefault}{}% Resets Default draw options for transversal edges
    \renewcommand{\pmdraw@drawAedgesOptionsDefault}{}% Resets default draw options for added edges in product diagram
}
\pmdSetToOriginalDefault% Sets original default values

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  For loop commands                                     %
%   - loosely ordered alphabetically                     %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\pmdraw@AedgesLoop}{% Starts loop for added edges in product diagram
    \@ifnextchar\pmdEmpty{}{% If not at end of list
        \pmdraw@drawAedges% Draw each edge
    }%
}
\newcommand{\pmdraw@bricksLoop}{% Starts loop to iterate over each brick in diagram
    \@ifnextchar\pmdEmpty{}{% If not at end of list
        \pmdraw@drawBrickInit% Draw each brick
    }%
}
\newcommand{\pmdraw@bricksLoopE}{% Starts loop to iterate over each E brick in diagram
    \@ifnextchar\pmdEmpty{}{% If not at end of list
        \pmdraw@drawBrickInitE% Draw each E brick
    }%
}
\newcommand{\pmdraw@LedgesLoop}{% Starts loop for lower non-transversal edges
    \@ifnextchar\pmdEmpty{}{% If not at end of list
        \pmdraw@drawLedges% Draw each edge
    }%
}
\newcommand{\pmdraw@TedgesLoop}{% Starts loop for transversal edges
    \@ifnextchar\pmdEmpty{}{% If not at end of list
        \pmdraw@drawTedges% Draw each edge
    }%
}
\newcommand{\pmdraw@UedgesLoop}{% Starts loop for upper non-transversal edges
    \@ifnextchar\pmdEmpty{}{% If not at end of list
        \pmdraw@drawUedges% Draw each edge
    }%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Draw commands                                         %
%   - loosely ordered alphabetically                     %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\pmdraw@drawBottomVertices}{% Draws bottom row of vertices
    \setcounter{pmdraw@bottomTotal}{\value{pmdraw@blankB}}% Store size of bottom row of vertices
    \addtocounter{pmdraw@bottomTotal}{\value{pmdraw@degreeB}}% Store size of bottom row of vertices
    \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram
        \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn
    \else% If not drawing first brick of diagram
        \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots
        \pmdraw@drawDots{0.5*\value{pmdraw@bottomShift}+0.5*\value{pmdraw@blankB}}{0}% Draw lower dots
    \fi%
    \ifnum\value{pmdraw@topTotal}>\value{pmdraw@bottomTotal}% If top row is longer than bottom row
        \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots
            \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
            % Store shifts
            \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}%
            \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}%
            \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}%
            \addtocounter{pmdraw@bottomShift}{\value{pmdraw@bottomTotal}}%
        \else% If drawing a diagram without dots
            \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
        \fi%
    \else% If bottom row is longer than top row
        \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots
            \addtocounter{pmdraw@brickShift}{\value{pmdraw@bottomTotal}}% Keep track of size of diagram
            % Store shifts
            \setcounter{pmdraw@topShift}{-\value{pmdraw@bottomTotal}}%
            \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}%
            \setcounter{pmdraw@bottomShift}{-\value{pmdraw@bottomTotal}}%
            \addtocounter{pmdraw@bottomShift}{\value{pmdraw@bottomTotal}}%
        \else% If drawing a diagram without dots
            \setcounter{pmdraw@brickShift}{\value{pmdraw@bottomTotal}}% Keep track of size of diagram
        \fi%
    \fi%
    \ifnum\value{pmdraw@degreeB}>0% If there are vertices to draw
        \foreach \x in {1,...,\value{pmdraw@degreeB}} {% For each vertex in row
            \ifnum\pmdraw@drawNoVertexBz=\x\else% If not skipping vertex
                \ifnum\pmdraw@drawNoVertexBa=\x\else% If not skipping vertex
                    \ifnum\pmdraw@drawNoVertexBb=\x\else% If not skipping vertex
                        \ifnum\pmdraw@drawNoVertexBc=\x\else% If not skipping vertex
                            \ifnum\pmdraw@drawNoVertexBd=\x\else% If not skipping vertex
                                \ifnum\pmdraw@drawNoVertexBe=\x\else% If not skipping vertex
                                    \ifnum\pmdraw@drawNoVertexBf=\x\else% If not skipping vertex
                                        \ifnum\pmdraw@drawNoVertexBg=\x\else% If not skipping vertex
                                            \ifnum\pmdraw@drawNoVertexBh=\x\else% If not skipping vertex
                                                \ifnum\pmdraw@drawNoVertexBi=\x\else% If not skipping vertex
                                                    \ifnum\pmdraw@drawNoVertexBBz=\x\else% If not skipping vertex
                                                        \ifnum\pmdraw@drawNoVertexBBa=\x\else% If not skipping vertex
                                                            \ifnum\pmdraw@drawNoVertexBBb=\x\else% If not skipping vertex
                                                                \ifnum\pmdraw@drawNoVertexBBc=\x\else% If not skipping vertex
                                                                    \ifnum\pmdraw@drawNoVertexBBd=\x\else% If not skipping vertex
                                                                        \ifnum\pmdraw@drawNoVertexBBe=\x\else% If not skipping vertex
                                                                            \ifnum\pmdraw@drawNoVertexBBf=\x\else% If not skipping vertex
                                                                                \ifnum\pmdraw@drawNoVertexBBg=\x\else% If not skipping vertex
                                                                                    \ifnum\pmdraw@drawNoVertexBBh=\x\else% If not skipping vertex
                                                                                        \ifnum\pmdraw@drawNoVertexBBi=\x\else% If not skipping vertex
                                                                                            \ifnum\pmdraw@drawGhostVertexBz=\x% If ghosting vertex
                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                            \else% If not ghosting vertex
                                                                                                \ifnum\pmdraw@drawGhostVertexBa=\x% If ghosting vertex
                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                \else% If not ghosting vertex
                                                                                                    \ifnum\pmdraw@drawGhostVertexBb=\x% If ghosting vertex
                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                    \else% If not ghosting vertex
                                                                                                        \ifnum\pmdraw@drawGhostVertexBc=\x% If ghosting vertex
                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                        \else% If not ghosting vertex
                                                                                                            \ifnum\pmdraw@drawGhostVertexBd=\x% If ghosting vertex
                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                            \else% If not ghosting vertex
                                                                                                                \ifnum\pmdraw@drawGhostVertexBe=\x% If ghosting vertex
                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                \else% If not ghosting vertex
                                                                                                                    \ifnum\pmdraw@drawGhostVertexBf=\x% If ghosting vertex
                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                    \else% If not ghosting vertex
                                                                                                                        \ifnum\pmdraw@drawGhostVertexBg=\x% If ghosting vertex
                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                        \else% If not ghosting vertex
                                                                                                                            \ifnum\pmdraw@drawGhostVertexBh=\x% If ghosting vertex
                                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                            \else% If not ghosting vertex
                                                                                                                                \ifnum\pmdraw@drawGhostVertexBi=\x% If ghosting vertex
                                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                \else% If not ghosting vertex
                                                                                                                                    \ifnum\pmdraw@drawGhostVertexBBz=\x% If ghosting vertex
                                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                    \else% If not ghosting vertex
                                                                                                                                        \ifnum\pmdraw@drawGhostVertexBBa=\x% If ghosting vertex
                                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                        \else% If not ghosting vertex
                                                                                                                                            \ifnum\pmdraw@drawGhostVertexBBb=\x% If ghosting vertex
                                                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                            \else% If not ghosting vertex
                                                                                                                                                \ifnum\pmdraw@drawGhostVertexBBc=\x% If ghosting vertex
                                                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                \else% If not ghosting vertex
                                                                                                                                                    \ifnum\pmdraw@drawGhostVertexBBd=\x% If ghosting vertex
                                                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                    \else% If not ghosting vertex
                                                                                                                                                        \ifnum\pmdraw@drawGhostVertexBBe=\x% If ghosting vertex
                                                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                        \else% If not ghosting vertex
                                                                                                                                                            \ifnum\pmdraw@drawGhostVertexBBf=\x% If ghosting vertex
                                                                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                            \else% If not ghosting vertex
                                                                                                                                                                \ifnum\pmdraw@drawGhostVertexBBg=\x% If ghosting vertex
                                                                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                                \else% If not ghosting vertex
                                                                                                                                                                    \ifnum\pmdraw@drawGhostVertexBBh=\x% If ghosting vertex
                                                                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                                    \else% If not ghosting vertex
                                                                                                                                                                        \ifnum\pmdraw@drawGhostVertexBBi=\x% If ghosting vertex
                                                                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankB}}{0}% Draw ghost upper vertex
                                                                                                                                                                        \else% If not ghosting vertex
                                                                                                                                                                            \pmdraw@drawVertex{\x + \value{pmdraw@blankB}}{0}% Draw upper vertex
                                                                                                                                                                        \fi%
                                                                                                                                                                    \fi%
                                                                                                                                                                \fi%
                                                                                                                                                            \fi%
                                                                                                                                                        \fi%
                                                                                                                                                    \fi%
                                                                                                                                                \fi%
                                                                                                                                            \fi%
                                                                                                                                        \fi%
                                                                                                                                    \fi%
                                                                                                                                \fi%
                                                                                                                            \fi%
                                                                                                                        \fi%
                                                                                                                    \fi%
                                                                                                                \fi%
                                                                                                            \fi%
                                                                                                        \fi%
                                                                                                    \fi%
                                                                                                \fi%
                                                                                            \fi%
                                                                                        \fi%
                                                                                    \fi%
                                                                                \fi%
                                                                            \fi%
                                                                        \fi%
                                                                    \fi%
                                                                \fi%
                                                            \fi%
                                                        \fi%
                                                    \fi%
                                                \fi%
                                            \fi%
                                        \fi%
                                    \fi%
                                \fi%
                            \fi%
                        \fi%
                    \fi%
                \fi%
            \fi%
            \ifnum\pmdraw@drawNoLabelBz=\x\else% If not skipping label
                \ifnum\pmdraw@drawNoLabelBa=\x\else% If not skipping label
                    \ifnum\pmdraw@drawNoLabelBb=\x\else% If not skipping label
                        \ifnum\pmdraw@drawNoLabelBc=\x\else% If not skipping label
                            \ifnum\pmdraw@drawNoLabelBd=\x\else% If not skipping label
                                \ifnum\pmdraw@drawNoLabelBe=\x\else% If not skipping label
                                    \ifnum\pmdraw@drawNoLabelBf=\x\else% If not skipping label
                                        \ifnum\pmdraw@drawNoLabelBg=\x\else% If not skipping label
                                            \ifnum\pmdraw@drawNoLabelBh=\x\else% If not skipping label
                                                \ifnum\pmdraw@drawNoLabelBi=\x\else% If not skipping label
                                                    \ifnum\pmdraw@drawNoLabelBBz=\x\else% If not skipping label
                                                        \ifnum\pmdraw@drawNoLabelBBa=\x\else% If not skipping label
                                                            \ifnum\pmdraw@drawNoLabelBBb=\x\else% If not skipping label
                                                                \ifnum\pmdraw@drawNoLabelBBc=\x\else% If not skipping label
                                                                    \ifnum\pmdraw@drawNoLabelBBd=\x\else% If not skipping label
                                                                        \ifnum\pmdraw@drawNoLabelBBe=\x\else% If not skipping label
                                                                            \ifnum\pmdraw@drawNoLabelBBf=\x\else% If not skipping label
                                                                                \ifnum\pmdraw@drawNoLabelBBg=\x\else% If not skipping label
                                                                                    \ifnum\pmdraw@drawNoLabelBBh=\x\else% If not skipping label
                                                                                        \ifnum\pmdraw@drawNoLabelBBi=\x\else% If not skipping label
                                                                                            \ifnum\pmdraw@ifLabelsB=1% If drawing labels
                                                                                                \pmdraw@drawLabelBottom{\x + \value{pmdraw@blankT}}{0}{\thepmdraw@labelStartB}% Draw label
                                                                                            \fi%
                                                                                        \fi%
                                                                                    \fi%
                                                                                \fi%
                                                                            \fi%
                                                                        \fi%
                                                                    \fi%
                                                                \fi%
                                                            \fi%
                                                        \fi%
                                                    \fi%
                                                \fi%
                                            \fi%
                                        \fi%
                                    \fi%
                                \fi%
                            \fi%
                        \fi%
                    \fi%
                \fi%
            \fi%
            \stepcounter{pmdraw@labelStartB}% Update label counter
        }%
    \fi%
}
\newcommand{\pmdraw@drawBrickInit}[1]{% Initialises the drawing of a brick
    \ifnum\value{pmdraw@ifDiagWDotsFirst}=0% If not drawing first brick in diagram
        \stepcounter{pmdraw@brickShift}% Makes space for dots to left of current brick
    \fi%
    \begin{scope}[shift={(\value{pmdraw@brickShift},0)}]% Shift brick to the right of already drawn bricks
        \pmdraw@drawBrick#1% Draw brick
    \end{scope}%
    \pmdraw@bricksLoop% Restart for loop
}
\newcommand{\pmdraw@drawBrickInitE}[1]{% Initialises the drawing of an E brick
    \ifnum\value{pmdraw@ifDiagWDotsFirst}=0% If not drawing first E brick in diagram
        \stepcounter{pmdraw@brickShift}% Makes space for dots to left of current E brick
    \fi%
    \begin{scope}[shift={(\value{pmdraw@brickShift},0)}]% Shift E brick to the right of already drawn bricks
        \pmdraw@drawBrickE#1% Draw E brick
    \end{scope}%
    \pmdraw@bricksLoopE% Restart for loop
}
\newcommand{\pmdraw@drawBrick}[4][]{% Draws a brick
    % #1 Options
    % #2 Upper non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3}
    % #3 Lower non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3}
    % #4 Transversals, as list [<options>]{<upper vertex>}{<lower vertex>}, eg [level=1]{2}{3}
    \setkeys{pmdraw@brick}{% Set default values for brick keys
        degree bottom=\usevalue{degree bottom},
        degree top=\usevalue{degree top},
        blank bottom=\usevalue{blank bottom},
        blank top=\usevalue{blank top},
        row sep=\usevalue{row sep},
        no vertex bottom 0=\usevalue{no vertex bottom 0},
        no vertex bottom 1=\usevalue{no vertex bottom 1},
        no vertex bottom 2=\usevalue{no vertex bottom 2},
        no vertex bottom 3=\usevalue{no vertex bottom 3},
        no vertex bottom 4=\usevalue{no vertex bottom 4},
        no vertex bottom 5=\usevalue{no vertex bottom 5},
        no vertex bottom 6=\usevalue{no vertex bottom 6},
        no vertex bottom 7=\usevalue{no vertex bottom 7},
        no vertex bottom 8=\usevalue{no vertex bottom 8},
        no vertex bottom 9=\usevalue{no vertex bottom 9},
        no vertex bottom 10=\usevalue{no vertex bottom 10},
        no vertex bottom 11=\usevalue{no vertex bottom 11},
        no vertex bottom 12=\usevalue{no vertex bottom 12},
        no vertex bottom 13=\usevalue{no vertex bottom 13},
        no vertex bottom 14=\usevalue{no vertex bottom 14},
        no vertex bottom 15=\usevalue{no vertex bottom 15},
        no vertex bottom 16=\usevalue{no vertex bottom 16},
        no vertex bottom 17=\usevalue{no vertex bottom 17},
        no vertex bottom 18=\usevalue{no vertex bottom 18},
        no vertex bottom 19=\usevalue{no vertex bottom 19},
        no vertex top 0=\usevalue{no vertex top 0},
        no vertex top 1=\usevalue{no vertex top 1},
        no vertex top 2=\usevalue{no vertex top 2},
        no vertex top 3=\usevalue{no vertex top 3},
        no vertex top 4=\usevalue{no vertex top 4},
        no vertex top 5=\usevalue{no vertex top 5},
        no vertex top 6=\usevalue{no vertex top 6},
        no vertex top 7=\usevalue{no vertex top 7},
        no vertex top 8=\usevalue{no vertex top 8},
        no vertex top 9=\usevalue{no vertex top 9},
        no vertex top 10=\usevalue{no vertex top 10},
        no vertex top 11=\usevalue{no vertex top 11},
        no vertex top 12=\usevalue{no vertex top 12},
        no vertex top 13=\usevalue{no vertex top 13},
        no vertex top 14=\usevalue{no vertex top 14},
        no vertex top 15=\usevalue{no vertex top 15},
        no vertex top 16=\usevalue{no vertex top 16},
        no vertex top 17=\usevalue{no vertex top 17},
        no vertex top 18=\usevalue{no vertex top 18},
        no vertex top 19=\usevalue{no vertex top 19},
        ghost vertex bottom 0=\usevalue{ghost vertex bottom 0},
        ghost vertex bottom 1=\usevalue{ghost vertex bottom 1},
        ghost vertex bottom 2=\usevalue{ghost vertex bottom 2},
        ghost vertex bottom 3=\usevalue{ghost vertex bottom 3},
        ghost vertex bottom 4=\usevalue{ghost vertex bottom 4},
        ghost vertex bottom 5=\usevalue{ghost vertex bottom 5},
        ghost vertex bottom 6=\usevalue{ghost vertex bottom 6},
        ghost vertex bottom 7=\usevalue{ghost vertex bottom 7},
        ghost vertex bottom 8=\usevalue{ghost vertex bottom 8},
        ghost vertex bottom 9=\usevalue{ghost vertex bottom 9},
        ghost vertex bottom 10=\usevalue{ghost vertex bottom 10},
        ghost vertex bottom 11=\usevalue{ghost vertex bottom 11},
        ghost vertex bottom 12=\usevalue{ghost vertex bottom 12},
        ghost vertex bottom 13=\usevalue{ghost vertex bottom 13},
        ghost vertex bottom 14=\usevalue{ghost vertex bottom 14},
        ghost vertex bottom 15=\usevalue{ghost vertex bottom 15},
        ghost vertex bottom 16=\usevalue{ghost vertex bottom 16},
        ghost vertex bottom 17=\usevalue{ghost vertex bottom 17},
        ghost vertex bottom 18=\usevalue{ghost vertex bottom 18},
        ghost vertex bottom 19=\usevalue{ghost vertex bottom 19},
        ghost vertex top 0=\usevalue{ghost vertex top 0},
        ghost vertex top 1=\usevalue{ghost vertex top 1},
        ghost vertex top 2=\usevalue{ghost vertex top 2},
        ghost vertex top 3=\usevalue{ghost vertex top 3},
        ghost vertex top 4=\usevalue{ghost vertex top 4},
        ghost vertex top 5=\usevalue{ghost vertex top 5},
        ghost vertex top 6=\usevalue{ghost vertex top 6},
        ghost vertex top 7=\usevalue{ghost vertex top 7},
        ghost vertex top 8=\usevalue{ghost vertex top 8},
        ghost vertex top 9=\usevalue{ghost vertex top 9},
        ghost vertex top 10=\usevalue{ghost vertex top 10},
        ghost vertex top 11=\usevalue{ghost vertex top 11},
        ghost vertex top 12=\usevalue{ghost vertex top 12},
        ghost vertex top 13=\usevalue{ghost vertex top 13},
        ghost vertex top 14=\usevalue{ghost vertex top 14},
        ghost vertex top 15=\usevalue{ghost vertex top 15},
        ghost vertex top 16=\usevalue{ghost vertex top 16},
        ghost vertex top 17=\usevalue{ghost vertex top 17},
        ghost vertex top 18=\usevalue{ghost vertex top 18},
        ghost vertex top 19=\usevalue{ghost vertex top 19},
        labels=\usevalue{labels},
        labels bottom=\usevalue{labels bottom},
        labels top=\usevalue{labels top},
        labels start=\usevalue{labels start},
        labels bottom start=\usevalue{labels bottom start},
        labels top start=\usevalue{labels top start},
        no label bottom 0=\usevalue{no label bottom 0},
        no label bottom 1=\usevalue{no label bottom 1},
        no label bottom 2=\usevalue{no label bottom 2},
        no label bottom 3=\usevalue{no label bottom 3},
        no label bottom 4=\usevalue{no label bottom 4},
        no label bottom 5=\usevalue{no label bottom 5},
        no label bottom 6=\usevalue{no label bottom 6},
        no label bottom 7=\usevalue{no label bottom 7},
        no label bottom 8=\usevalue{no label bottom 8},
        no label bottom 9=\usevalue{no label bottom 9},
        no label bottom 10=\usevalue{no label bottom 10},
        no label bottom 11=\usevalue{no label bottom 11},
        no label bottom 12=\usevalue{no label bottom 12},
        no label bottom 13=\usevalue{no label bottom 13},
        no label bottom 14=\usevalue{no label bottom 14},
        no label bottom 15=\usevalue{no label bottom 15},
        no label bottom 16=\usevalue{no label bottom 16},
        no label bottom 17=\usevalue{no label bottom 17},
        no label bottom 18=\usevalue{no label bottom 18},
        no label bottom 19=\usevalue{no label bottom 19},
        no label top 0=\usevalue{no label top 0},
        no label top 1=\usevalue{no label top 1},
        no label top 2=\usevalue{no label top 2},
        no label top 3=\usevalue{no label top 3},
        no label top 4=\usevalue{no label top 4},
        no label top 5=\usevalue{no label top 5},
        no label top 6=\usevalue{no label top 6},
        no label top 7=\usevalue{no label top 7},
        no label top 8=\usevalue{no label top 8},
        no label top 9=\usevalue{no label top 9},
        no label top 10=\usevalue{no label top 10},
        no label top 11=\usevalue{no label top 11},
        no label top 12=\usevalue{no label top 12},
        no label top 13=\usevalue{no label top 13},
        no label top 14=\usevalue{no label top 14},
        no label top 15=\usevalue{no label top 15},
        no label top 16=\usevalue{no label top 16},
        no label top 17=\usevalue{no label top 17},
        no label top 18=\usevalue{no label top 18},
        no label top 19=\usevalue{no label top 19},
        labels bottom draw=\usevalue{labels bottom draw},
        labels bottom node=\usevalue{labels bottom node},
        labels top draw=\usevalue{labels top draw},
        labels top node=\usevalue{labels top node},
        dots draw=\usevalue{dots draw},
        dots node=\usevalue{dots node},
        vertices bottom phantom=\usevalue{vertices bottom phantom},
        vertices top phantom=\usevalue{vertices top phantom},
        vertices bottom uncover=\usevalue{vertices bottom uncover},
        vertices top uncover=\usevalue{vertices top uncover},
        levels=\usevalue{levels},
        levels bottom=\usevalue{levels bottom},
        levels top=\usevalue{levels top},
        levels sep=\usevalue{levels sep},
        levels sep bottom=\usevalue{levels sep bottom},
        levels sep top=\usevalue{levels sep top},
        edges first=\usevalue{edges first},
        edges last=\usevalue{edges last},
        transversals first=\usevalue{transversals first},
        edges phantom=\usevalue{edges phantom},
        edges uncover=\usevalue{edges uncover},
        brace draw=\usevalue{brace draw},
        brace node=\usevalue{brace node},
        bracket draw=\usevalue{bracket draw},
        bracket node=\usevalue{bracket node},
        decorate before=\usevalue{decorate before},
        decorate after=\usevalue{decorate after}
    }%
    \setkeys{pmdraw@brick}{levels,#1}% Processes options and set default levels
    \pmdraw@hookBeforeBrick% Hook before drawing brick
    \ifnum\pmdraw@ifEdgesFirst=0% If drawing vertices first
        \@ifclassloaded{beamer}{% If in beamer
            \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices
                \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                    \pmdraw@drawTopVertices% Draw base diagram
                \else% If hiding top vertices
                    \phantom{%
                        \pmdraw@drawTopVertices% Draw base diagram
                    }%
                \fi%
            }%
            \uncover<\pmdraw@verticesBottomUncover>{% Uncovers bottom vertices
                \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
                    \pmdraw@drawBottomVertices% Draw base diagram
                \else% If hiding top vertices
                    \phantom{%
                        \pmdraw@drawBottomVertices% Draw base diagram
                    }%
                \fi%
            }%
            \uncover<\pmdraw@edgesUncover>{% Uncovers edges
                \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                    \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                    \else% If drawing transversal first
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                    \fi%
                \else% If hiding edges
                    \phantom{%
                        \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                            \pmdraw@UedgesLoop% Draws upper edges
                            #2%
                            \pmdEmpty%
                            \pmdraw@LedgesLoop% Draws lower edges
                            #3%
                            \pmdEmpty%
                            \pmdraw@TedgesLoop% Draws transversals
                            #4%
                            \pmdEmpty%
                        \else% If drawing transversal first
                            \pmdraw@TedgesLoop% Draws transversals
                            #4%
                            \pmdEmpty%
                            \pmdraw@UedgesLoop% Draws upper edges
                            #2%
                            \pmdEmpty%
                            \pmdraw@LedgesLoop% Draws lower edges
                            #3%
                            \pmdEmpty%
                        \fi%
                    }%
                \fi%
            }%
        }{% If not in beamer
            \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                \pmdraw@drawTopVertices% Draw base diagram
            \else% If hiding top vertices
                \phantom{%
                    \pmdraw@drawTopVertices% Draw base diagram
                }%
            \fi%
            \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
                \pmdraw@drawBottomVertices% Draw base diagram
            \else% If hiding top vertices
                \phantom{%
                    \pmdraw@drawBottomVertices% Draw base diagram
                }%
            \fi%
            \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                    \pmdraw@TedgesLoop% Draws transversals
                    #4%
                    \pmdEmpty%
                \else% If drawing transversal first
                    \pmdraw@TedgesLoop% Draws transversals
                    #4%
                    \pmdEmpty%
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                \fi%
            \else% If hiding edges
                \phantom{%
                    \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                    \else% If drawing transversal first
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                    \fi%
                }%
            \fi%
        }%
    \else% If drawing edges first
        \@ifclassloaded{beamer}{% If in beamer
            \uncover<\pmdraw@edgesUncover>{% Uncovers edges
                \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                    \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                    \else% If drawing transversal first
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                    \fi%
                \else% If hiding edges
                    \phantom{%
                        \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                            \pmdraw@UedgesLoop% Draws upper edges
                            #2%
                            \pmdEmpty%
                            \pmdraw@LedgesLoop% Draws lower edges
                            #3%
                            \pmdEmpty%
                            \pmdraw@TedgesLoop% Draws transversals
                            #4%
                            \pmdEmpty%
                        \else% If drawing transversal first
                            \pmdraw@TedgesLoop% Draws transversals
                            #4%
                            \pmdEmpty%
                            \pmdraw@UedgesLoop% Draws upper edges
                            #2%
                            \pmdEmpty%
                            \pmdraw@LedgesLoop% Draws lower edges
                            #3%
                            \pmdEmpty%
                        \fi%
                    }%
                \fi%
            }%
            \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices
                \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                    \pmdraw@drawTopVertices% Draw base diagram
                \else% If hiding top vertices
                    \phantom{%
                        \pmdraw@drawTopVertices% Draw base diagram
                    }%
                \fi%
            }%
            \uncover<\pmdraw@verticesBottomUncover>{% Uncovers bottm vertices
                \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
                    \pmdraw@drawBottomVertices% Draw base diagram
                \else% If hiding top vertices
                    \phantom{%
                        \pmdraw@drawBottomVertices% Draw base diagram
                    }%
                \fi%
            }%
        }{% If not in beamer
            \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                    \pmdraw@TedgesLoop% Draws transversals
                    #4%
                    \pmdEmpty%
                \else% If drawing transversal first
                    \pmdraw@TedgesLoop% Draws transversals
                    #4%
                    \pmdEmpty%
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                \fi%
            \else% If hiding edges
                \phantom{%
                    \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                    \else% If drawing transversal first
                        \pmdraw@TedgesLoop% Draws transversals
                        #4%
                        \pmdEmpty%
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                    \fi%
                }%
            \fi%
            \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                \pmdraw@drawTopVertices% Draw base diagram
            \else% If hiding top vertices
                \phantom{%
                    \pmdraw@drawTopVertices% Draw base diagram
                }%
            \fi%
            \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
                \pmdraw@drawBottomVertices% Draw base diagram
            \else% If hiding top vertices
                \phantom{%
                    \pmdraw@drawBottomVertices% Draw base diagram
                }%
            \fi%
        }%
    \fi%
    \pmdraw@hookAfterBrick% Hook after drawing brick
    % Resets user keys and other flags to default values
    \renewcommand{\pmdraw@drawBraceDrawOptions}{}%
    \renewcommand{\pmdraw@drawBraceNodeOptions}{}%
    \renewcommand{\pmdraw@drawBracketDrawOptions}{}%
    \renewcommand{\pmdraw@drawBracketNodeOptions}{}%
    \renewcommand{\pmdraw@drawDotsDrawOptions}{}%
    \renewcommand{\pmdraw@drawDotsNodeOptions}{}%
    \renewcommand{\pmdraw@drawLabelBDrawOptions}{}%
    \renewcommand{\pmdraw@drawLabelBNodeOptions}{}%
    \renewcommand{\pmdraw@drawLabelTDrawOptions}{}%
    \renewcommand{\pmdraw@drawLabelTNodeOptions}{}%
    \renewcommand{\pmdraw@drawLedgesDrawOptions}{}%
    \renewcommand{\pmdraw@drawNoLabelBz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBi}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBi}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTi}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTi}{-1}%
    \renewcommand{\pmdraw@drawTedgesDrawOptions}{}%
    \renewcommand{\pmdraw@drawUedgesDrawOptions}{}%
    \renewcommand{\pmdraw@drawVertexOptions}{}%
    \renewcommand{\pmdraw@drawGhostOptions}{}%
    \renewcommand{\pmdraw@hookBeforeBrick}{}%
    \renewcommand{\pmdraw@hookAfterBrick}{}%
    \renewcommand{\pmdraw@ifEdgesFirst}{0}%
    \renewcommand{\pmdraw@ifLabelsB}{0}%
    \renewcommand{\pmdraw@ifLabelsT}{0}%
    \renewcommand{\pmdraw@ifTedgesFirst}{0}%
    \renewcommand{\pmdraw@edgesUncover}{1-}%
    \renewcommand{\pmdraw@verticesBottomUncover}{1-}%
    \renewcommand{\pmdraw@verticesTopUncover}{1-}%
    \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault%
    \let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault%
    \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault%
    \let\pmdraw@drawVertex\pmdraw@drawVertexDefault%
    \let\pmdraw@drawVertexGhost\pmdraw@drawGhostDefault%
    \setcounter{pmdraw@blankB}{0}%
    \setcounter{pmdraw@blankT}{0}%
    \setcounter{pmdraw@labelStartB}{1}%
    \setcounter{pmdraw@labelStartT}{1}%
    \setcounter{pmdraw@ifEdges}{0}%
    \setcounter{pmdraw@ifVerticesBottom}{0}%
    \setcounter{pmdraw@ifVerticesTop}{0}%
}
\newcommand{\pmdraw@drawBrickE}[3][]{% Draws an E brick
    % #1 Options
    % #2 Upper non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3}
    % #3 Lower non-transversal edges, as list [<options>]{<left vertex>}{<right vertex>}, eg [level=1]{2}{3}
    \setkeys{pmdraw@brick}{% Set default values for brick keys
        degree bottom=\usevalue{degree bottom},
        degree top=\usevalue{degree top},
        blank bottom=\usevalue{blank bottom},
        blank top=\usevalue{blank top},
        row sep=\usevalue{row sep},
        no vertex bottom 0=\usevalue{no vertex bottom 0},
        no vertex bottom 1=\usevalue{no vertex bottom 1},
        no vertex bottom 2=\usevalue{no vertex bottom 2},
        no vertex bottom 3=\usevalue{no vertex bottom 3},
        no vertex bottom 4=\usevalue{no vertex bottom 4},
        no vertex bottom 5=\usevalue{no vertex bottom 5},
        no vertex bottom 6=\usevalue{no vertex bottom 6},
        no vertex bottom 7=\usevalue{no vertex bottom 7},
        no vertex bottom 8=\usevalue{no vertex bottom 8},
        no vertex bottom 9=\usevalue{no vertex bottom 9},
        no vertex bottom 10=\usevalue{no vertex bottom 10},
        no vertex bottom 11=\usevalue{no vertex bottom 11},
        no vertex bottom 12=\usevalue{no vertex bottom 12},
        no vertex bottom 13=\usevalue{no vertex bottom 13},
        no vertex bottom 14=\usevalue{no vertex bottom 14},
        no vertex bottom 15=\usevalue{no vertex bottom 15},
        no vertex bottom 16=\usevalue{no vertex bottom 16},
        no vertex bottom 17=\usevalue{no vertex bottom 17},
        no vertex bottom 18=\usevalue{no vertex bottom 18},
        no vertex bottom 19=\usevalue{no vertex bottom 19},
        no vertex top 0=\usevalue{no vertex top 0},
        no vertex top 1=\usevalue{no vertex top 1},
        no vertex top 2=\usevalue{no vertex top 2},
        no vertex top 3=\usevalue{no vertex top 3},
        no vertex top 4=\usevalue{no vertex top 4},
        no vertex top 5=\usevalue{no vertex top 5},
        no vertex top 6=\usevalue{no vertex top 6},
        no vertex top 7=\usevalue{no vertex top 7},
        no vertex top 8=\usevalue{no vertex top 8},
        no vertex top 9=\usevalue{no vertex top 9},
        no vertex top 10=\usevalue{no vertex top 10},
        no vertex top 11=\usevalue{no vertex top 11},
        no vertex top 12=\usevalue{no vertex top 12},
        no vertex top 13=\usevalue{no vertex top 13},
        no vertex top 14=\usevalue{no vertex top 14},
        no vertex top 15=\usevalue{no vertex top 15},
        no vertex top 16=\usevalue{no vertex top 16},
        no vertex top 17=\usevalue{no vertex top 17},
        no vertex top 18=\usevalue{no vertex top 18},
        no vertex top 19=\usevalue{no vertex top 19},
        ghost vertex bottom 0=\usevalue{ghost vertex bottom 0},
        ghost vertex bottom 1=\usevalue{ghost vertex bottom 1},
        ghost vertex bottom 2=\usevalue{ghost vertex bottom 2},
        ghost vertex bottom 3=\usevalue{ghost vertex bottom 3},
        ghost vertex bottom 4=\usevalue{ghost vertex bottom 4},
        ghost vertex bottom 5=\usevalue{ghost vertex bottom 5},
        ghost vertex bottom 6=\usevalue{ghost vertex bottom 6},
        ghost vertex bottom 7=\usevalue{ghost vertex bottom 7},
        ghost vertex bottom 8=\usevalue{ghost vertex bottom 8},
        ghost vertex bottom 9=\usevalue{ghost vertex bottom 9},
        ghost vertex bottom 10=\usevalue{ghost vertex bottom 10},
        ghost vertex bottom 11=\usevalue{ghost vertex bottom 11},
        ghost vertex bottom 12=\usevalue{ghost vertex bottom 12},
        ghost vertex bottom 13=\usevalue{ghost vertex bottom 13},
        ghost vertex bottom 14=\usevalue{ghost vertex bottom 14},
        ghost vertex bottom 15=\usevalue{ghost vertex bottom 15},
        ghost vertex bottom 16=\usevalue{ghost vertex bottom 16},
        ghost vertex bottom 17=\usevalue{ghost vertex bottom 17},
        ghost vertex bottom 18=\usevalue{ghost vertex bottom 18},
        ghost vertex bottom 19=\usevalue{ghost vertex bottom 19},
        ghost vertex top 0=\usevalue{ghost vertex top 0},
        ghost vertex top 1=\usevalue{ghost vertex top 1},
        ghost vertex top 2=\usevalue{ghost vertex top 2},
        ghost vertex top 3=\usevalue{ghost vertex top 3},
        ghost vertex top 4=\usevalue{ghost vertex top 4},
        ghost vertex top 5=\usevalue{ghost vertex top 5},
        ghost vertex top 6=\usevalue{ghost vertex top 6},
        ghost vertex top 7=\usevalue{ghost vertex top 7},
        ghost vertex top 8=\usevalue{ghost vertex top 8},
        ghost vertex top 9=\usevalue{ghost vertex top 9},
        ghost vertex top 10=\usevalue{ghost vertex top 10},
        ghost vertex top 11=\usevalue{ghost vertex top 11},
        ghost vertex top 12=\usevalue{ghost vertex top 12},
        ghost vertex top 13=\usevalue{ghost vertex top 13},
        ghost vertex top 14=\usevalue{ghost vertex top 14},
        ghost vertex top 15=\usevalue{ghost vertex top 15},
        ghost vertex top 16=\usevalue{ghost vertex top 16},
        ghost vertex top 17=\usevalue{ghost vertex top 17},
        ghost vertex top 18=\usevalue{ghost vertex top 18},
        ghost vertex top 19=\usevalue{ghost vertex top 19},
        labels=\usevalue{labels},
        labels bottom=\usevalue{labels bottom},
        labels top=\usevalue{labels top},
        labels start=\usevalue{labels start},
        labels bottom start=\usevalue{labels bottom start},
        labels top start=\usevalue{labels top start},
        no label bottom 0=\usevalue{no label bottom 0},
        no label bottom 1=\usevalue{no label bottom 1},
        no label bottom 2=\usevalue{no label bottom 2},
        no label bottom 3=\usevalue{no label bottom 3},
        no label bottom 4=\usevalue{no label bottom 4},
        no label bottom 5=\usevalue{no label bottom 5},
        no label bottom 6=\usevalue{no label bottom 6},
        no label bottom 7=\usevalue{no label bottom 7},
        no label bottom 8=\usevalue{no label bottom 8},
        no label bottom 9=\usevalue{no label bottom 9},
        no label bottom 10=\usevalue{no label bottom 10},
        no label bottom 11=\usevalue{no label bottom 11},
        no label bottom 12=\usevalue{no label bottom 12},
        no label bottom 13=\usevalue{no label bottom 13},
        no label bottom 14=\usevalue{no label bottom 14},
        no label bottom 15=\usevalue{no label bottom 15},
        no label bottom 16=\usevalue{no label bottom 16},
        no label bottom 17=\usevalue{no label bottom 17},
        no label bottom 18=\usevalue{no label bottom 18},
        no label bottom 19=\usevalue{no label bottom 19},
        no label top 0=\usevalue{no label top 0},
        no label top 1=\usevalue{no label top 1},
        no label top 2=\usevalue{no label top 2},
        no label top 3=\usevalue{no label top 3},
        no label top 4=\usevalue{no label top 4},
        no label top 5=\usevalue{no label top 5},
        no label top 6=\usevalue{no label top 6},
        no label top 7=\usevalue{no label top 7},
        no label top 8=\usevalue{no label top 8},
        no label top 9=\usevalue{no label top 9},
        no label top 10=\usevalue{no label top 10},
        no label top 11=\usevalue{no label top 11},
        no label top 12=\usevalue{no label top 12},
        no label top 13=\usevalue{no label top 13},
        no label top 14=\usevalue{no label top 14},
        no label top 15=\usevalue{no label top 15},
        no label top 16=\usevalue{no label top 16},
        no label top 17=\usevalue{no label top 17},
        no label top 18=\usevalue{no label top 18},
        no label top 19=\usevalue{no label top 19},
        labels bottom draw=\usevalue{labels bottom draw},
        labels bottom node=\usevalue{labels bottom node},
        labels top draw=\usevalue{labels top draw},
        labels top node=\usevalue{labels top node},
        dots draw=\usevalue{dots draw},
        dots node=\usevalue{dots node},
        vertices bottom phantom=\usevalue{vertices bottom phantom},
        vertices top phantom=\usevalue{vertices top phantom},
        vertices bottom uncover=\usevalue{vertices bottom uncover},
        vertices top uncover=\usevalue{vertices top uncover},
        levels=\usevalue{levels},
        levels bottom=\usevalue{levels bottom},
        levels top=\usevalue{levels top},
        levels sep=\usevalue{levels sep},
        levels sep bottom=\usevalue{levels sep bottom},
        levels sep top=\usevalue{levels sep top},
        edges first=\usevalue{edges first},
        edges last=\usevalue{edges last},
        transversals first=\usevalue{transversals first},
        edges phantom=\usevalue{edges phantom},
        edges uncover=\usevalue{edges uncover},
        brace draw=\usevalue{brace draw},
        brace node=\usevalue{brace node},
        bracket draw=\usevalue{bracket draw},
        bracket node=\usevalue{bracket node},
        decorate before=\usevalue{decorate before},
        decorate after=\usevalue{decorate after}
    }%
    \setkeys{pmdraw@brick}{levels,#1}% Processes options and set default levels
    \pmdraw@hookBeforeBrick% Hook before drawing brick
    \ifnum\pmdraw@ifEdgesFirst=0% If drawing vertices first
        \@ifclassloaded{beamer}{% If in beamer
            \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices
                \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                    \pmdraw@drawTopVertices% Draw base diagram
                \else% If hiding top vertices
                    \phantom{%
                        \pmdraw@drawTopVertices% Draw base diagram
                    }%
                \fi%
                \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram
                    \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn
                \else% If not drawing first brick of diagram
                    \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots
                \fi%
                \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots
                    \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
                    % Store shifts
                    \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}%
                    \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}%
                    \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}%
                    \addtocounter{pmdraw@bottomShift}{\value{pmdraw@topTotal}}%
                \else% If drawing a diagram without dots
                    \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
                \fi%
            }%
            \uncover<\pmdraw@edgesUncover>{% Uncovers edges
                \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                \else% If hiding edges
                    \phantom{%
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                    }%
                \fi%
            }%
        }{% If not in beamer
            \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                \pmdraw@drawTopVertices% Draw base diagram
            \else% If hiding top vertices
                \phantom{%
                    \pmdraw@drawTopVertices% Draw base diagram
                }%
            \fi%
            \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram
                \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn
            \else% If not drawing first brick of diagram
                \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots
            \fi%
            \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots
                \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
                % Store shifts
                \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}%
                \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}%
                \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}%
                \addtocounter{pmdraw@bottomShift}{\value{pmdraw@topTotal}}%
            \else% If drawing a diagram without dots
                \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
            \fi%
            \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                \pmdraw@UedgesLoop% Draws upper edges
                #2%
                \pmdEmpty%
                \pmdraw@LedgesLoop% Draws lower edges
                #3%
                \pmdEmpty%
            \else% If hiding edges
                \phantom{%
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                }%
            \fi%
        }%
    \else% If drawing edges first
        \@ifclassloaded{beamer}{% If in beamer
            \uncover<\pmdraw@edgesUncover>{% Uncovers edges
                \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                \else% If hiding edges
                    \phantom{%
                        \pmdraw@UedgesLoop% Draws upper edges
                        #2%
                        \pmdEmpty%
                        \pmdraw@LedgesLoop% Draws lower edges
                        #3%
                        \pmdEmpty%
                    }%
                \fi%
            }%
            \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices
                \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                    \pmdraw@drawTopVertices% Draw base diagram
                \else% If hiding top vertices
                    \phantom{%
                        \pmdraw@drawTopVertices% Draw base diagram
                    }%
                \fi%
                \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram
                    \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn
                \else% If not drawing first brick of diagram
                    \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots
                \fi%
                \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots
                    \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
                    % Store shifts
                    \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}%
                    \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}%
                    \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}%
                    \addtocounter{pmdraw@bottomShift}{\value{pmdraw@topTotal}}%
                \else% If drawing a diagram without dots
                    \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
                \fi%
            }%
        }{% If not in beamer
            \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
                \pmdraw@UedgesLoop% Draws upper edges
                #2%
                \pmdEmpty%
                \pmdraw@LedgesLoop% Draws lower edges
                #3%
                \pmdEmpty%
            \else% If hiding edges
                \phantom{%
                    \pmdraw@UedgesLoop% Draws upper edges
                    #2%
                    \pmdEmpty%
                    \pmdraw@LedgesLoop% Draws lower edges
                    #3%
                    \pmdEmpty%
                }%
            \fi%
            \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram
                \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn
            \else% If not drawing first brick of diagram
                \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots
            \fi%
            \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
                \pmdraw@drawTopVertices% Draw base diagram
            \else% If hiding top vertices
                \phantom{%
                    \pmdraw@drawTopVertices% Draw base diagram
                }%
            \fi%
            \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots
                \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
                % Store shifts
                \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}%
                \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}%
                \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}%
                \addtocounter{pmdraw@bottomShift}{\value{pmdraw@topTotal}}%
            \else% If drawing a diagram without dots
                \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram
            \fi%
        }%
    \fi%
    \pmdraw@hookAfterBrick% Hook after drawing brick
    % Resets user keys and other flags to default values
    \renewcommand{\pmdraw@drawBraceDrawOptions}{}%
    \renewcommand{\pmdraw@drawBraceNodeOptions}{}%
    \renewcommand{\pmdraw@drawBracketDrawOptions}{}%
    \renewcommand{\pmdraw@drawBracketNodeOptions}{}%
    \renewcommand{\pmdraw@drawDotsDrawOptions}{}%
    \renewcommand{\pmdraw@drawDotsNodeOptions}{}%
    \renewcommand{\pmdraw@drawLabelBDrawOptions}{}%
    \renewcommand{\pmdraw@drawLabelBNodeOptions}{}%
    \renewcommand{\pmdraw@drawLabelTDrawOptions}{}%
    \renewcommand{\pmdraw@drawLabelTNodeOptions}{}%
    \renewcommand{\pmdraw@drawLedgesDrawOptions}{}%
    \renewcommand{\pmdraw@drawNoLabelBz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBi}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelBBi}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTi}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTz}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTa}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTb}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTc}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTd}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTe}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTf}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTg}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTh}{-1}%
    \renewcommand{\pmdraw@drawNoLabelTTi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexBBi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTi}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTz}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTa}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTb}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTc}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTd}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTe}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTf}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTg}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTh}{-1}%
    \renewcommand{\pmdraw@drawNoVertexTTi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexBBi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTi}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTz}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTa}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTb}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTc}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTd}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTe}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTf}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTg}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTh}{-1}%
    \renewcommand{\pmdraw@drawGhostVertexTTi}{-1}%
    \renewcommand{\pmdraw@drawTedgesDrawOptions}{}%
    \renewcommand{\pmdraw@drawUedgesDrawOptions}{}%
    \renewcommand{\pmdraw@drawVertexOptions}{}%
    \renewcommand{\pmdraw@drawGhostOptions}{}%
    \renewcommand{\pmdraw@hookBeforeBrick}{}%
    \renewcommand{\pmdraw@hookAfterBrick}{}%
    \renewcommand{\pmdraw@ifEdgesFirst}{0}%
    \renewcommand{\pmdraw@ifLabelsB}{0}%
    \renewcommand{\pmdraw@ifLabelsT}{0}%
    \renewcommand{\pmdraw@ifTedgesFirst}{0}%
    \renewcommand{\pmdraw@edgesUncover}{1-}%
    \renewcommand{\pmdraw@verticesBottomUncover}{1-}%
    \renewcommand{\pmdraw@verticesTopUncover}{1-}%
    \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault%
    \let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault%
    \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault%
    \let\pmdraw@drawVertex\pmdraw@drawVertexDefault%
    \let\pmdraw@drawVerteGhost\pmdraw@drawGhostDefault%
    \setcounter{pmdraw@blankB}{0}%
    \setcounter{pmdraw@blankT}{0}%
    \setcounter{pmdraw@labelStartB}{1}%
    \setcounter{pmdraw@labelStartT}{1}%
    \setcounter{pmdraw@ifEdges}{0}%
    \setcounter{pmdraw@ifVerticesBottom}{0}%
    \setcounter{pmdraw@ifVerticesTop}{0}%
}
\newcommand{\pmdraw@drawLedges}[3][]{% Draws lower non-transversal edge, #1 options, #2 L vertex, #3 R vertex
    \setcounter{pmdraw@NTlevel}{1}% Store default level of edge
    \setkeys{pmdraw@NTedges}{% Sets default non-transversal edge keys
        level=\usevalue{level},
        height=\usevalue{height},
        edge draw=\usevalue{edge draw},
        fill=\usevalue{fill},
        phantom=\usevalue{phantom},
        uncover=\usevalue{uncover},
        label=\usevalue{label},
        label node=\usevalue{label node}
    }%
    \setkeys{pmdraw@NTedges}{#1}% Processes options
    \ifdim\pmdraw@NTedgesHeight pt=-1000pt% If using default heights
        \tikzmath{%
            \pmdraw{edgeHeight}=\value{pmdraw@NTlevel}*\pmdraw{edgeSepL};% Calculates height based on level of edge
        }%
    \else% If using manual heights
        \tikzmath{%
            \pmdraw{edgeHeight}=\pmdraw@NTedgesHeight;% Set manual height
        }%
    \fi%
    \@ifclassloaded{beamer}{% If in beamer
        \uncover<\pmdraw@edgeUncover>{% Uncovers edge
            \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
                \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
            \else% If hiding edge
                \phantom{%
                    \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
                }%
            \fi%
        }%
    }{% If not in beamer
        \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
            \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
        \else% If hiding edge
            \phantom{%
                \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
            }%
        \fi%
    }%
    % Resets user keys and other flags to default values
    \renewcommand{\pmdraw@NTedgesHeight}{-1000}%
    \renewcommand{\pmdraw@edgeUncover}{1-}%
    \setcounter{pmdraw@ifEdge}{0}%
    \let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault%
    \pmdraw@LedgesLoop% Restart for loop
}
\newcommand{\pmdraw@drawTedges}[3][]{% Draws transversal edge, #1 options, #2 upper vertex, #3 lower vertex
    \setkeys{pmdraw@Tedges}{% Sets default key values for transversal edges
        edge draw=\usevalue{edge draw},
        phantom=\usevalue{phantom},
        uncover=\usevalue{uncover},
        label=\usevalue{label},
        label node=\usevalue{label node}
    }%
   \setkeys{pmdraw@Tedges}{#1}% Processes options
   \@ifclassloaded{beamer}{% If in beamer
       \uncover<\pmdraw@edgeUncover>{% Uncovers edge
           \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
               \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
           \else% If hiding edge
               \phantom{%
                   \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
               }%
           \fi%
       }%
   }{% If not in beamer
       \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
           \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
       \else% If hiding edge
           \phantom{%
               \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
           }%
       \fi%
   }%
   % Resets user keys and other flags to default values
   \renewcommand{\pmdraw@edgeUncover}{1-}%
   \setcounter{pmdraw@ifEdge}{0}%
   \let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault%
   \pmdraw@TedgesLoop% Restart for loop
}
\newcommand{\pmdraw@drawTopVertices}{% Draws top row of vertices
    \setcounter{pmdraw@topTotal}{\value{pmdraw@blankT}}% Store size of top row of vertices
    \addtocounter{pmdraw@topTotal}{\value{pmdraw@degreeT}}% Store size of top row of vertices
    \ifnum\value{pmdraw@degreeT}>0% If there are vertices to draw
        \foreach \x in {1,...,\value{pmdraw@degreeT}} {% For each vertex in row
            \ifnum\pmdraw@drawNoVertexTz=\x\else% If not skipping vertex
                \ifnum\pmdraw@drawNoVertexTa=\x\else% If not skipping vertex
                    \ifnum\pmdraw@drawNoVertexTb=\x\else% If not skipping vertex
                        \ifnum\pmdraw@drawNoVertexTc=\x\else% If not skipping vertex
                            \ifnum\pmdraw@drawNoVertexTd=\x\else% If not skipping vertex
                                \ifnum\pmdraw@drawNoVertexTe=\x\else% If not skipping vertex
                                    \ifnum\pmdraw@drawNoVertexTf=\x\else% If not skipping vertex
                                        \ifnum\pmdraw@drawNoVertexTg=\x\else% If not skipping vertex
                                            \ifnum\pmdraw@drawNoVertexTh=\x\else% If not skipping vertex
                                                \ifnum\pmdraw@drawNoVertexTi=\x\else% If not skipping vertex
                                                    \ifnum\pmdraw@drawNoVertexTTz=\x\else% If not skipping vertex
                                                        \ifnum\pmdraw@drawNoVertexTTa=\x\else% If not skipping vertex
                                                            \ifnum\pmdraw@drawNoVertexTTb=\x\else% If not skipping vertex
                                                                \ifnum\pmdraw@drawNoVertexTTc=\x\else% If not skipping vertex
                                                                    \ifnum\pmdraw@drawNoVertexTTd=\x\else% If not skipping vertex
                                                                        \ifnum\pmdraw@drawNoVertexTTe=\x\else% If not skipping vertex
                                                                            \ifnum\pmdraw@drawNoVertexTTf=\x\else% If not skipping vertex
                                                                                \ifnum\pmdraw@drawNoVertexTTg=\x\else% If not skipping vertex
                                                                                    \ifnum\pmdraw@drawNoVertexTTh=\x\else% If not skipping vertex
                                                                                        \ifnum\pmdraw@drawNoVertexTTi=\x\else% If not skipping vertex
                                                                                            \ifnum\pmdraw@drawGhostVertexTz=\x% If ghosting vertex
                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                            \else% If not ghosting vertex
                                                                                                \ifnum\pmdraw@drawGhostVertexTa=\x% If ghosting vertex
                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                \else% If not ghosting vertex
                                                                                                    \ifnum\pmdraw@drawGhostVertexTb=\x% If ghosting vertex
                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                    \else% If not ghosting vertex
                                                                                                        \ifnum\pmdraw@drawGhostVertexTc=\x% If ghosting vertex
                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                        \else% If not ghosting vertex
                                                                                                            \ifnum\pmdraw@drawGhostVertexTd=\x% If ghosting vertex
                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                            \else% If not ghosting vertex
                                                                                                                \ifnum\pmdraw@drawGhostVertexTe=\x% If ghosting vertex
                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                \else% If not ghosting vertex
                                                                                                                    \ifnum\pmdraw@drawGhostVertexTf=\x% If ghosting vertex
                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                    \else% If not ghosting vertex
                                                                                                                        \ifnum\pmdraw@drawGhostVertexTg=\x% If ghosting vertex
                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                        \else% If not ghosting vertex
                                                                                                                            \ifnum\pmdraw@drawGhostVertexTh=\x% If ghosting vertex
                                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                            \else% If not ghosting vertex
                                                                                                                                \ifnum\pmdraw@drawGhostVertexTi=\x% If ghosting vertex
                                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                \else% If not ghosting vertex
                                                                                                                                    \ifnum\pmdraw@drawGhostVertexTTz=\x% If ghosting vertex
                                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                    \else% If not ghosting vertex
                                                                                                                                        \ifnum\pmdraw@drawGhostVertexTTa=\x% If ghosting vertex
                                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                        \else% If not ghosting vertex
                                                                                                                                            \ifnum\pmdraw@drawGhostVertexTTb=\x% If ghosting vertex
                                                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                            \else% If not ghosting vertex
                                                                                                                                                \ifnum\pmdraw@drawGhostVertexTTc=\x% If ghosting vertex
                                                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                \else% If not ghosting vertex
                                                                                                                                                    \ifnum\pmdraw@drawGhostVertexTTd=\x% If ghosting vertex
                                                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                    \else% If not ghosting vertex
                                                                                                                                                        \ifnum\pmdraw@drawGhostVertexTTe=\x% If ghosting vertex
                                                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                        \else% If not ghosting vertex
                                                                                                                                                            \ifnum\pmdraw@drawGhostVertexTTf=\x% If ghosting vertex
                                                                                                                                                                \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                            \else% If not ghosting vertex
                                                                                                                                                                \ifnum\pmdraw@drawGhostVertexTTg=\x% If ghosting vertex
                                                                                                                                                                    \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                                \else% If not ghosting vertex
                                                                                                                                                                    \ifnum\pmdraw@drawGhostVertexTTh=\x% If ghosting vertex
                                                                                                                                                                        \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                                    \else% If not ghosting vertex
                                                                                                                                                                        \ifnum\pmdraw@drawGhostVertexTTi=\x% If ghosting vertex
                                                                                                                                                                            \pmdraw@drawVertexGhost{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw ghost upper vertex
                                                                                                                                                                        \else% If not ghosting vertex
                                                                                                                                                                            \pmdraw@drawVertex{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper vertex
                                                                                                                                                                        \fi%
                                                                                                                                                                    \fi%
                                                                                                                                                                \fi%
                                                                                                                                                            \fi%
                                                                                                                                                        \fi%
                                                                                                                                                    \fi%
                                                                                                                                                \fi%
                                                                                                                                            \fi%
                                                                                                                                        \fi%
                                                                                                                                    \fi%
                                                                                                                                \fi%
                                                                                                                            \fi%
                                                                                                                        \fi%
                                                                                                                    \fi%
                                                                                                                \fi%
                                                                                                            \fi%
                                                                                                        \fi%
                                                                                                    \fi%
                                                                                                \fi%
                                                                                            \fi%
                                                                                        \fi%
                                                                                    \fi%
                                                                                \fi%
                                                                            \fi%
                                                                        \fi%
                                                                    \fi%
                                                                \fi%
                                                            \fi%
                                                        \fi%
                                                    \fi%
                                                \fi%
                                            \fi%
                                        \fi%
                                    \fi%
                                \fi%
                            \fi%
                        \fi%
                    \fi%
                \fi%
            \fi%
            \ifnum\pmdraw@drawNoLabelTz=\x\else% If not skipping label
                \ifnum\pmdraw@drawNoLabelTa=\x\else% If not skipping label
                    \ifnum\pmdraw@drawNoLabelTb=\x\else% If not skipping label
                        \ifnum\pmdraw@drawNoLabelTc=\x\else% If not skipping label
                            \ifnum\pmdraw@drawNoLabelTd=\x\else% If not skipping label
                                \ifnum\pmdraw@drawNoLabelTe=\x\else% If not skipping label
                                    \ifnum\pmdraw@drawNoLabelTf=\x\else% If not skipping label
                                        \ifnum\pmdraw@drawNoLabelTg=\x\else% If not skipping label
                                            \ifnum\pmdraw@drawNoLabelTh=\x\else% If not skipping label
                                                \ifnum\pmdraw@drawNoLabelTi=\x\else% If not skipping label
                                                    \ifnum\pmdraw@drawNoLabelTTz=\x\else% If not skipping label
                                                        \ifnum\pmdraw@drawNoLabelTTa=\x\else% If not skipping label
                                                            \ifnum\pmdraw@drawNoLabelTTb=\x\else% If not skipping label
                                                                \ifnum\pmdraw@drawNoLabelTTc=\x\else% If not skipping label
                                                                    \ifnum\pmdraw@drawNoLabelTTd=\x\else% If not skipping label
                                                                        \ifnum\pmdraw@drawNoLabelTTe=\x\else% If not skipping label
                                                                            \ifnum\pmdraw@drawNoLabelTTf=\x\else% If not skipping label
                                                                                \ifnum\pmdraw@drawNoLabelTTg=\x\else% If not skipping label
                                                                                    \ifnum\pmdraw@drawNoLabelTTh=\x\else% If not skipping label
                                                                                        \ifnum\pmdraw@drawNoLabelTTi=\x\else% If not skipping label
                                                                                            \ifnum\pmdraw@ifLabelsT=1% If drawing labels
                                                                                                \pmdraw@drawLabelTop{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}{\thepmdraw@labelStartT}% Draw label
                                                                                            \fi%
                                                                                        \fi%
                                                                                    \fi%
                                                                                \fi%
                                                                            \fi%
                                                                        \fi%
                                                                    \fi%
                                                                \fi%
                                                            \fi%
                                                        \fi%
                                                    \fi%
                                                \fi%
                                            \fi%
                                        \fi%
                                    \fi%
                                \fi%
                            \fi%
                        \fi%
                    \fi%
                \fi%
            \fi%
            \stepcounter{pmdraw@labelStartT}% Update label counter
        }%
    \fi%
}
\newcommand{\pmdraw@drawUedges}[3][]{% Draws upper non-transversal edge, #1 options, #2 L vertex, #3 R vertex
    \setcounter{pmdraw@NTlevel}{1}% Store default level of edge
    \setkeys{pmdraw@NTedges}{% Sets default non-transversal edge keys
        level=\usevalue{level},
        height=\usevalue{height},
        edge draw=\usevalue{edge draw},
        fill=\usevalue{fill},
        phantom=\usevalue{phantom},
        uncover=\usevalue{uncover},
        label=\usevalue{label},
        label node=\usevalue{label node}
    }%
    \setkeys{pmdraw@NTedges}{#1}% Processes options
    \ifdim\pmdraw@NTedgesHeight pt=-1000pt% If using default heights
        \tikzmath{%
            \pmdraw{edgeHeight}=\value{pmdraw@NTlevel}*\pmdraw{edgeSepU};% Calculates height based on level of edge
        }%
    \else% If using manual heights
        \tikzmath{%
            \pmdraw{edgeHeight}=\pmdraw@rowSep-\pmdraw@NTedgesHeight;% Set manual height
        }%
    \fi%
    \@ifclassloaded{beamer}{% If in beamer
        \uncover<\pmdraw@edgeUncover>{% Uncovers edge
            \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
                \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
            \else% If hiding edge
                \phantom{%
                    \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
                }%
            \fi%
        }%
    }{% If not in beamer
        \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
            \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
        \else% If hiding edge
            \phantom{%
                \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
            }%
        \fi%
    }%
    % Resets user keys and other flags to default values
    \renewcommand{\pmdraw@NTedgesHeight}{-1000}%
    \renewcommand{\pmdraw@edgeUncover}{1-}%
    \renewcommand{\pmdraw@ifEdgesFill}{0}%
    \setcounter{pmdraw@ifEdge}{0}%
    \let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault%
    \let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault%
    \pmdraw@UedgesLoop% Restart for loop
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                        %
%  Grid creation                                         %
%                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% This is a verbatim copy of:
% https://tex.stackexchange.com/a/467908

\newif\if@showgrid@grid
\newif\if@showgrid@left
\newif\if@showgrid@right
\newif\if@showgrid@below
\newif\if@showgrid@above
\tikzset{%
    every show grid/.style={},
    show grid/.style={execute at end picture={\@showgrid{grid=true,#1}}},%
    show grid/.default={true},
    show grid/.cd,
    labels/.style={font={\sffamily\small},help lines},
    xlabels/.style={},
    ylabels/.style={},
    keep bb/.code={\useasboundingbox (current bounding box.south west) rectangle (current bounding box.north west);},
    true/.style={left,below},
    false/.style={left=false,right=false,above=false,below=false,grid=false},
    none/.style={left=false,right=false,above=false,below=false},
    all/.style={left=true,right=true,above=true,below=true},
    grid/.is if=@showgrid@grid,
    left/.is if=@showgrid@left,
    right/.is if=@showgrid@right,
    below/.is if=@showgrid@below,
    above/.is if=@showgrid@above,
    false,
}

\def\@showgrid#1{%
    \begin{scope}[every show grid,show grid/.cd,#1]
    \if@showgrid@grid
    \begin{pgfonlayer}{background}
    \draw [help lines]
        (current bounding box.south west) grid
        (current bounding box.north east);
%
    \pgfpointxy{1}{1}%
    \edef\xs{\the\pgf@x}%
    \edef\ys{\the\pgf@y}%
    \pgfpointanchor{current bounding box}{south west}
    \edef\xa{\the\pgf@x}%
    \edef\ya{\the\pgf@y}%
    \pgfpointanchor{current bounding box}{north east}
    \edef\xb{\the\pgf@x}%
    \edef\yb{\the\pgf@y}%
    \pgfmathtruncatemacro\xbeg{ceil(\xa/\xs)}
    \pgfmathtruncatemacro\xend{floor(\xb/\xs)}
    \if@showgrid@below
    \foreach \X in {\xbeg,...,\xend} {
        \node [below,show grid/labels,show grid/xlabels] at (\X,\ya) {\X};
    }
    \fi
    \if@showgrid@above
    \foreach \X in {\xbeg,...,\xend} {
        \node [above,show grid/labels,show grid/xlabels] at (\X,\yb) {\X};
    }
    \fi
    \pgfmathtruncatemacro\ybeg{ceil(\ya/\ys)}
    \pgfmathtruncatemacro\yend{floor(\yb/\ys)}
    \if@showgrid@left
    \foreach \Y in {\ybeg,...,\yend} {
        \node [left,show grid/labels,show grid/ylabels] at (\xa,\Y) {\Y};
    }
    \fi
    \if@showgrid@right
    \foreach \Y in {\ybeg,...,\yend} {
        \node [right,show grid/labels,show grid/ylabels] at (\xb,\Y) {\Y};
    }
    \fi
    \end{pgfonlayer}
    \fi
    \end{scope}
}
\tikzset{every show grid/.style={show grid/keep bb}}%  Keep the original bounding box!

\endinput
