'get new candidate solutions in genotyp, sampled from a
multi-variate normal distribution.
Arguments are
`number`
number of returned solutions, by default the
population size `popsize` (AKA lambda).
`xmean`
distribution mean
`sigma_fac`
multiplier for internal sample width (standard
deviation)
`ask_geno` returns a list of N-dimensional candidate solutions
in genotyp representation and is called by `ask`.
:See: `ask`, `ask_and_eval`'

def ask_geno(self, number=None, xmean=None, sigma_fac=1):

    if ((number is None) or (number < 1)):
        number = self.sp.popsize
    if (xmean is None):
        xmean = self.mean
    if (self.countiter == 0):
        self.tic = time.clock()
        self.elapsed_time = ElapsedTime()
    if self.opts['CMA_AII']:
        if (self.countiter == 0):
            self.aii = AII(self.x0, self.sigma0)
        self.flgtelldone = False
        pop = self.aii.ask(number)
        return pop
    sigma = (sigma_fac * self.sigma)
    if (self.sp.CMA_on and (((self.opts['updatecovwait'] is None) and (self.countiter >= (self.itereigenupdated + (((1.0 / (self.sp.c1 + self.sp.cmu)) / self.N) / 10)))) or ((self.opts['updatecovwait'] is not None) and (self.countiter > (self.itereigenupdated + self.opts['updatecovwait']))))):
        self.updateBD()
    if self.flgtelldone:
        self.flgtelldone = False
        self.ary = []
    arz = self.randn((number, self.N))
    if (11 < 3):
        perm = np.random.permutation(self.N)
        for i in xrange(min((len(arz), self.N))):
            l = (sum((arz[i] ** 2)) ** 0.5)
            arz[i] *= 0
            if (11 < 3):
                arz[i][perm[int((i / 2))]] = (l * ((2 * (i % 2)) - 1))
            else:
                arz[i][perm[(i % self.N)]] = (l * np.sign((np.random.rand(1) - 0.5)))
    if (number == self.sp.popsize):
        self.arz = arz
    else:
        pass
    if (11 < 3):
        for i in xrange(len(arz)):
            ss = (sum((arz[i] ** 2)) ** 0.5)
            arz[i] *= (self.const.chiN / ss)
    self.ary = (self.sigma_vec * np.dot(self.B, (self.D * arz).T).T)
    pop = (xmean + (sigma * self.ary))
    self.evaluations_per_f_value = 1
    return pop
