_tryGrabRow(hand, alt) {
        if (hand.pos === undefined) {
            return undefined;
        }

        // Which wire is it? Is it one that's actually in the circuit?
        let wire = this.wireIndexAt(hand.pos.y);
        if (wire < 0 || wire >= this.circuitDefinition.numWires) {
            return undefined;
        }

        // Is it inside the intended click area, instead of just off to the side?
        let r = this._wireInitialStateClickableRect(wire);
        if (!r.containsPoint(hand.pos)) {
            return undefined;
        }

        let {newCircuit, initialState, rowGates} = this._cutRow(wire);
        let holdOffset = new Point(0, hand.pos.y - r.y);
        if (alt) {
            rowGates = rowGates.map(e => e === undefined ? e : e.alternate);
        }
        return {
            newCircuit: this.withCircuit(newCircuit),
            newHand: hand.withHeldRow({initialState, gates: rowGates}, holdOffset)
        };
    }
@param {!Hand} hand
@param {!boolean} alt
@returns {undefined|!{newCircuit: !DisplayedCircuit, newHand: !Hand}}