def fixed_shuffle_numpy()

in codes/word_randomization.py [0:0]


def fixed_shuffle_numpy(lst, mask, percent=1.0):
    to_permute = [i for i, m in enumerate(mask) if m]
    num_permute = int(len(to_permute) * percent)
    num_to_fix = len(to_permute) - num_permute
    if num_to_fix > 0:
        to_fix_ids = random.sample(to_permute, num_to_fix)
        mask = [True if mask[i] or i in to_fix_ids else False for i in range(len(mask))]
    # mask = [True if mask[i] or random.uniform(0,1) > percent else False for i,e in enumerate(mask)]
    unfrozen_indices = [i for i, e in enumerate(lst) if not mask[i]]
    unfrozen_set = lst[unfrozen_indices]
    unfrozen_set_og = copy.deepcopy(unfrozen_set)
    if len(unfrozen_set) > 1:
        while True:
            random.shuffle(unfrozen_set)
            same_pos = sum(
                [
                    1
                    for i, e in enumerate(unfrozen_set)
                    if unfrozen_set[i] == unfrozen_set_og[i]
                ]
            )
            if same_pos == 0:
                break
    lst[unfrozen_indices] = unfrozen_set