def fnd_unq_rws(A, return_index=False, return_inverse=False):
A = np.require(A, requirements='<STR_LIT:C>')<EOL>assert A.ndim == <NUM_LIT:2>, "<STR_LIT>"<EOL>B = np.unique(A.view([('<STR_LIT>', A.dtype)]*A.shape[<NUM_LIT:1>]),<EOL>return_index=return_index,<EOL>return_inverse=return_inverse)<EOL>if return_index or return_inverse:<EOL><INDENT>return (B[<NUM_LIT:0>].view(A.dtype).reshape((-<NUM_LIT:1>, A.shape[<NUM_LIT:1>]), order='<STR_LIT:C>'),)+ B[<NUM_LIT:1>:]<EOL><DEDENT>else:<EOL><INDENT>return B.view(A.dtype).reshape((-<NUM_LIT:1>, A.shape[<NUM_LIT:1>]), order='<STR_LIT:C>')<EOL><DEDENT>
Find unique rows in 2D array.

    Parameters
    ----------
    A : 2d numpy array
        Array for which unique rows should be identified.
    return_index : bool
        Bool to decide whether I is returned.
    return_inverse : bool
        Bool to decide whether J is returned.

    Returns
    -------
    B : 1d numpy array,
        Unique rows
    I: 1d numpy array, only returned if return_index is True
        B = A[I,:]
    J: 2d numpy array, only returned if return_inverse is True
        A = B[J,:]