Fixes numba#3888. Modified the np.random.choice implementation inside of numba to match the implementation used in numpy, which uses np.random.permutation. Not using np.random.permutation previously resulted in different values for np.random.choice inside of numba vs outside of numba, when using the same np.random.seed value.
Fixes numba#3888.
Modified the np.random.choice implementation inside of numba to match the implementation used in numpy, which uses np.random.permutation.
Not using np.random.permutation previously resulted in different values for np.random.choice inside of numba vs outside of numba, when using the same np.random.seed value.

Using this approach, the following now match, when replace=False:

@numba.njit
def new_numba_random_choice(a, size, replace):
    np.random.seed(3)
    return np.random.choice(a, size, replace)

def np_random_choice(a, size, replace):
    np.random.seed(3)
    return np.random.choice(a, size, replace)

Previously, np.random.choice inside of numba only matched output with numpy under the same np.random.seed when replace=True

sklam/numba,seibert/numba,numba/numba,numba/numba,IntelLabs/numba,sklam/numba,stuartarchibald/numba,cpcloud/numba,gmarkall/numba,stonebig/numba,IntelLabs/numba,seibert/numba,stonebig/numba,cpcloud/numba,stonebig/numba,cpcloud/numba,gmarkall/numba,sklam/numba,numba/numba,gmarkall/numba,cpcloud/numba,stuartarchibald/numba,stuartarchibald/numba,seibert/numba,stonebig/numba,stuartarchibald/numba,IntelLabs/numba,stonebig/numba,gmarkall/numba,seibert/numba,numba/numba,IntelLabs/numba,cpcloud/numba,seibert/numba,gmarkall/numba,sklam/numba,IntelLabs/numba,numba/numba,stuartarchibald/numba,sklam/numba