def _internal_variation(self, random, candidates, args):
        tau = args.setdefault('tau', None)
        tau_prime = args.setdefault('tau_prime', None)
        epsilon = args.setdefault('epsilon', 0.00001)
        mutants = []
        n = len(candidates[0]) // 2
        if tau is None:
            tau = 1 / math.sqrt(2 * math.sqrt(n))
        if tau_prime is None:
            tau_prime = 1 / math.sqrt(2 * n) 
        for candidate in candidates:
            cand = candidate[:n]
            strat = candidate[n:]
            for i, s in enumerate(strat):
                strat[i] = s * math.exp(tau_prime * random.gauss(0, 1) + tau * random.gauss(0, 1))
                strat[i] = max(strat[i], epsilon)
            for i, (c, s) in enumerate(zip(cand, strat)):
                cand[i] = c + random.gauss(0, s)
            cand = self.bounder(cand, args)
            cand.extend(strat)
            mutants.append(cand)
        return mutants
dataset/ETHPy150Open aarongarrett/inspyred/inspyred/ec/ec.py/ES._internal_variation/original