'Perfoms the elementary column operation `op`.
`op` may be one of
* "n->kn" (column n goes to k*n)
* "n<->m" (swap column n and column m)
* "n->n+km" (column n goes to column n + k*column m)
Parameters
op : string; the elementary row operation
col : the column to apply the column operation
k : the multiple to apply in the column operation
col1 : one column of a column swap
col2 : second column of a column swap or column "m" in the column operation
"n->n+km"'

def elementary_col_op(self, op='n->kn', col=None, k=None, col1=None, col2=None):

    (op, col, k, col1, col2) = self._normalize_op_args(op, col, k, col1, col2, 'col')
    if (op == 'n->kn'):
        return self._eval_col_op_multiply_col_by_const(col, k)
    if (op == 'n<->m'):
        return self._eval_col_op_swap(col1, col2)
    if (op == 'n->n+km'):
        return self._eval_col_op_add_multiple_to_other_col(col, k, col2)
