def make_default_variations(default_fractions, composition_space): """ Creates the variations with default parameter values and the provided default fractions. Returns a list containing the variation objects (Mating, StructureMut, NumAtomsMut and Permutation). Args: default_fractions: a dictionary containing the default fractions to use for each variation composition_space: the CompositionSpace of the search """ variations_list = [] mating = variations.Mating({'fraction': default_fractions['mating']}) structure_mut = variations.StructureMut( {'fraction': default_fractions['structure_mut']}) num_atoms_mut = variations.NumAtomsMut( {'fraction': default_fractions['num_atoms_mut']}) permutation = variations.Permutation( {'fraction': default_fractions['permutation']}, composition_space) variations_list.append(mating) variations_list.append(structure_mut) variations_list.append(num_atoms_mut) variations_list.append(permutation) return variations_list
def make_variations(parameters, default_fractions, composition_space): """ Creates the variations, using default parameter values if needed. Returns a list containing the variation objects (Mating, StructureMut, NumAtomssMut and Permutation). Args: parameters: the dictionary produced by calling yaml.load() on the input file default_fractions: a dictionary containing the default fractions to use for each variation composition_space: the CompositionSpace of the search """ if 'Variations' not in parameters: return make_default_variations(default_fractions, composition_space) elif parameters['Variations'] in (None, 'default'): return make_default_variations(default_fractions, composition_space) else: variations_list = [] # mating if 'Mating' not in parameters['Variations']: pass elif parameters['Variations']['Mating'] is None: print('If the "Mating" keyword is used, its "fraction" keyword ' 'must also be set.') print('Quitting...') quit() else: if parameters['Variations']['Mating']['fraction'] in (None, 'default'): print('The "fraction" kwyword is not optional and must ' 'contain a valid entry (between 0 and 1) for the Mating ' 'variation.') print('Quitting...') quit() else: mating = variations.Mating(parameters['Variations']['Mating']) variations_list.append(mating) # structure mutation if 'StructureMut' not in parameters['Variations']: pass elif parameters['Variations']['StructureMut'] is None: print('If the "StructureMut" keyword is used, its "fraction" ' 'keyword must also be set.') print('Quitting...') quit() else: if parameters['Variations']['StructureMut']['fraction'] in ( None, 'default'): print('The "fraction" keyword is not optional and must ' 'contain a valid entry (between 0 and 1) for the ' 'StructureMut variation.') print('Quitting...') quit() else: structure_mut = variations.StructureMut( parameters['Variations']['StructureMut']) variations_list.append(structure_mut) # mutating the number of atoms in the cell if 'NumAtomsMut' not in parameters['Variations']: pass elif parameters['Variations']['NumAtomsMut'] is None: print('If the "NumAtomsMut" keyword is used, its "fraction" ' 'keyword must also be set.') print('Quitting...') quit() else: if parameters['Variations']['NumAtomsMut']['fraction'] in ( None, 'default'): print('The "fraction" keyword is not optional and must ' 'contain a valid entry (between 0 and 1) for the ' 'NumAtomsMut variation.') print('Quitting...') quit() else: num_atoms_mut = variations.NumAtomsMut( parameters['Variations']['NumAtomsMut']) variations_list.append(num_atoms_mut) # permutation (swapping atoms) if 'Permutation' not in parameters['Variations']: pass elif parameters['Variations']['Permutation'] is None: print('If the "Permutation" keyword is used, its "fraction" ' 'keyword must also be set.') print('Quitting...') quit() else: if parameters['Variations']['Permutation']['fraction'] in ( None, 'default'): print('The "fraction" keyword is not optional and must ' 'contain a valid entry (between 0 and 1) for the ' 'Permutation variation.') print('Quitting...') else: permutation = variations.Permutation( parameters['Variations']['Permutation'], composition_space) variations_list.append(permutation) return variations_list