Source code for blossom.simulation.population_funcs

[docs] def hash_by_id(organism_list): """ Simple hashing by organism id over a list of organisms. """ hash_table = {} for organism in organism_list: id = organism.organism_id if id in hash_table: hash_table[id].append(organism) else: hash_table[id] = [organism] return hash_table
[docs] def hash_by_location(organism_list): """ Simple hashing by organism location over a list of organisms. """ hash_table = {} for organism in organism_list: location = tuple(organism.location) if location in hash_table: hash_table[location].append(organism) else: hash_table[location] = [organism] return hash_table
[docs] def organism_filter(organism_list, *conditions): """ Selects organisms from organism list according to a set of conditions. Each condition should be a function that receives an Organism object as input and returns a boolean as output. Example: .. code-block:: python organism_filter( population_dict['prey1']['organisms'], lambda organism: organism.alive ) """ remaining_list = organism_list for condition in conditions: assert callable(condition) remaining_list = filter(condition, remaining_list) return list(remaining_list)
[docs] def organism_list_copy(organism_list): return [organism.clone_self() for organism in organism_list]
[docs] def get_organism_list(population_dict): """ Constructs organism list from population dict data structure. """ organism_list = [] for species in population_dict: organism_list.extend(population_dict[species]['organisms']) return organism_list
[docs] def get_population_dict(organism_list, species_names): """ Constructs population dict from organism list data structure. """ population_dict = { species: { 'statistics': { 'total': 0, 'alive': 0, 'dead': 0 }, 'organisms': [] } for species in species_names } for organism in organism_list: population_dict[organism.species_name]['organisms'].append(organism) population_dict[organism.species_name]['statistics']['total'] += 1 if organism.alive: population_dict[organism.species_name]['statistics']['alive'] += 1 else: population_dict[organism.species_name]['statistics']['dead'] += 1 return population_dict