         // Create and add the artificial variable to the tableau
 
         let art = Symbol(.slack)
-        _rows[art] = Row(row)
-
-        _artificial = Row(row)
+        rows[art] = Row(row)
+
+        artificial = Row(row)
 
         // Optimize the artificial objective. This is successful
         // only if the artificial objective is optimized to zero.
-        try optimize(objective: _artificial!)
-        let success = _artificial!.constant.isNearZero
-        _artificial = nil
+        try optimize(objective: artificial!)
+        let success = artificial!.constant.isNearZero
+        artificial = nil
 
         // If the artificial variable is basic, pivot the row so that
         // it becomes basic. If the row is constant, exit early.
 
-        if let rowptr = _rows[art] {
+        if let rowptr = rows[art] {
             var deleteQueue = [Symbol]()
-            for s in _rows.keys {
-                if _rows[s]! == rowptr {
+            for s in rows.keys {
+                if rows[s]! == rowptr {
                     deleteQueue.append(s)
                 }
             }
 
             while !deleteQueue.isEmpty {
-                _rows[deleteQueue.popLast()!] = nil
+                rows[deleteQueue.popLast()!] = nil
             }
 
             deleteQueue.removeAll()

        var second: Row?
        var third: Row?

        for s in _rows.keys {
            let candidateRow = _rows[s]!
            let c = candidateRow.coefficientFor(marker)

            if c == 0.0 {

     * If a symbol does not exist for the variable, one will be created.
     */
    private func getVarSymbol(_ variable: Variable) -> Symbol {
        if let symbol = variableSymbols[variable] {
            return symbol
        } else {
            let symbol = Symbol(.external)
            variableSymbols[variable] = symbol
            return symbol
        }
    }
