def swap_columns(self, indices1, indices2, target):
    """
    swap columns at indices1 of self with columns at indices2 of target.
    <indices1> and <indices2> must be row vectors of equal length. Its elements are float32's representing integers, e.g. "34.0" means the integer "34".
    after this call, for all r,c, target[r,indices2[c]=self[r,indices1[c]].
    self can be same as target, but then the result will be non-deterministic if there is overlap between indices1 and indices2. Can be used for in-place shuffling by making sure indices1 and indices2 do not overlap.
    This returns target.
    Negative indices are interpreted in the usual Python way: all elements of <indices> had better be in the range [-self.shape[1], self.shape[1]-1].
    This does bounds checking, but out of bounds indices do not raise an exception (because the programmer was lazy). Instead, they result in NaN values in <target>.
    """
    assert indices1.shape[0] == 1
    assert indices1.shape == indices2.shape
    err_code = _eigenmat.swapCols(self.p_mat, target.p_mat, indices1.p_mat, indices2.p_mat)

    if err_code:
      raise generate_exception(err_code)

    return target

    swap columns at indices1 of self with columns at indices2 of target.
    <indices1> and <indices2> must be row vectors of equal length. Its elements are float32's representing integers, e.g. "34.0" means the integer "34".
    after this call, for all r,c, target[r,indices2[c]=self[r,indices1[c]].
    self can be same as target, but then the result will be non-deterministic if there is overlap between indices1 and indices2. Can be used for in-place shuffling by making sure indices1 and indices2 do not overlap.
    This returns target.
    Negative indices are interpreted in the usual Python way: all elements of <indices> had better be in the range [-self.shape[1], self.shape[1]-1].
    This does bounds checking, but out of bounds indices do not raise an exception (because the programmer was lazy). Instead, they result in NaN values in <target>.
    
eigenmat/eigenmat.py