_disabledReason_remixing(row, inputMeasureMask) {
        // Measured qubits can't be re-superposed for implementation simplicity reasons.
        let g = this.gates[row];
        let mask = ((1 << g.height) - 1) << row;
        let maskMeasured = mask & inputMeasureMask;
        if (maskMeasured !== 0 && g.knownBitPermutationFunc === undefined) {
            // Don't try to superpose measured qubits.
            if (g.effectMightCreateSuperpositions()) {
                return "no\nremix\n(sorry)";
            }

            // Don't try to mix measured and coherent qubits, or coherently mix measured qubits.
            if (g.effectMightPermutesStates()) {
                if (maskMeasured !== mask || this.hasCoherentControl(inputMeasureMask)) {
                    return "no\nremix\n(sorry)";
                }
            }
        }

        // Check permutation subgroups for bad mixing of measured and coherent qubits.
        if (g.knownBitPermutationGroupMasks !== undefined) {
            for (let maskGroup of g.knownBitPermutationGroupMasks) {
                let isSingleton = ((maskGroup - 1) & maskGroup) === 0;
                if (isSingleton) {
                    continue;
                }

                maskGroup <<= row;
                let hasCoherentQubits = (maskGroup & inputMeasureMask) !== maskGroup;
                let hasMeasuredQubits = (maskGroup & inputMeasureMask) !== 0;
                let coherentControl = this.hasCoherentControl(inputMeasureMask);
                let controlled = this.hasControl(inputMeasureMask);
                let coherentControlledMixingOfMeasured = hasMeasuredQubits && coherentControl;
                let controlledMixingOfCoherentAndMeasured = hasCoherentQubits && hasMeasuredQubits && controlled;
                if (coherentControlledMixingOfMeasured || controlledMixingOfCoherentAndMeasured) {
                    return "no\nremix\n(sorry)";
                }
            }
        }

        return undefined;
    }
@param {!int} row
@param {!int} inputMeasureMask
@returns {undefined|!string}
@private