with network autocorrelation. While many methods could produce such network autocorrelation, we work with graph cluster randomization, in which the network is partitioned into clusters and those clusters are used to assign treatments. Let the vertices be partitioned into $N_C$ clusters $C_1, C_2, ..., C_{N_C}$, and define $C(\cdot): \{1, ..., N\} \rightarrow \{1, ..., N_C\}$ as mapping vertex indices to cluster indices. Thus $C_i$ refers to a cluster by its index, while $C(i)$ refers to the cluster containing vertex $i$.

In standard graph cluster randomization, as presented by @ugander_graph_2013, treatments are assigned at the cluster level, where each cluster $C_j$ is assigned a treatment $W_j \sim \text{Bernoulli}(q)$. Thus the treatments assigned to vertices are simply those assigned to their clusters, $$Z_i = W_{C(i)}.$$ For some estimands and analyses, assigning all vertices in a cluster to the same treatment can make it impossible for some vertices to be observed with, e.g., some particular number of treated peers. This can violate the requirement that all units have positive probability of assignment to all conditions. For this reason, it can be desirable to use an assignment method that allows for some vertices to be assigned to a different treatment than the rest of 