| \begin{algorithm}[bt] |
| \caption{PolyILR Basis Construction} |
| \label{alg:polyilr} |
| {\footnotesize |
| \begin{algorithmic}[1] |
| \REQUIRE Rooted $T$ with $d$ leaves, internal node ordering $\pi$ (DFS) |
| \ENSURE ILR basis $V \in \mathbb{R}^{d \times (d-1)}$ |
| \STATE $j \leftarrow 1$ |
| \FOR{each internal node $u$ from $\pi$} |
| \STATE $k_u \leftarrow$ number of children of $u$ |
| \FOR{$r = 1, \ldots, k_u$} |
| \STATE $C_u^{(r)} \leftarrow$ leaves descending from $r$-th child |
| \STATE $n_r \leftarrow |C_u^{(r)}|$ |
| \ENDFOR |
| \STATE $\mathcal{S}_u \leftarrow \{\mathbf{h} \in \mathbb{R}^{k_u} : \sum_r h_r = 0\}$ |
| \STATE $\langle \mathbf{h}, \mathbf{h}' \rangle_w \leftarrow \sum_r h_r h'_r / n_r$ |
| \STATE $H^{(u)} \leftarrow$ Helmert matrix in $\mathbb{R}^{k_u \times (k_u-1)}$ |
| \STATE $\widetilde{H}^{(u)} \leftarrow$ Gram-Schmidt on $H^{(u)}$ under $\langle \cdot, \cdot \rangle_w$ |
| \FOR{$m = 1, \ldots, k_u - 1$} |
| \FOR{$i = 1, \ldots, d$} |
| \IF{$i \in C_u^{(r)}$ for some $r$} |
| \STATE $V_{i,j} \leftarrow \widetilde{H}^{(u)}_{r,m} / n_r$ |
| \ELSE |
| \STATE $V_{i,j} \leftarrow 0$ |
| \ENDIF |
| \ENDFOR |
| \STATE $j \leftarrow j + 1$ |
| \ENDFOR |
| \ENDFOR |
| \STATE \textbf{return} $V$ |
| \end{algorithmic} |
| } |
| \end{algorithm} |