import simuPOP as sim # The class myParentsChooser is defined in module myParentsChooser try: from myParentsChooser import myParentsChooser except ImportError: # if failed to import the C++ version, use a Python version import random class myParentsChooser: def __init__(self, maleIndexes, femaleIndexes): self.maleIndexes = maleIndexes self.femaleIndexes = femaleIndexes def chooseParents(self): return self.maleIndexes[random.randint(0, len(self.maleIndexes)-1)],\ self.femaleIndexes[random.randint(0, len(self.femaleIndexes)-1)] def parentsChooser(pop, sp): 'How to call a C++ level parents chooser.' # create an object with needed information (such as x, y) ... pc = myParentsChooser( [x for x in range(pop.popSize()) if pop.individual(x).sex() == sim.MALE], [x for x in range(pop.popSize()) if pop.individual(x).sex() == sim.FEMALE]) while True: # return indexes of parents repeatedly yield pc.chooseParents() pop = sim.Population(100, loci=1) simu.evolve( initOps=[ sim.InitSex(), sim.InitGenotype(freq=[0.5, 0.5]) ], matingScheme=sim.HomoMating(sim.PyParentsChooser(parentsChooser), sim.OffspringGenerator(ops=sim.MendelianGenoTransmitter())), gen = 100 )