def init_bands_parameters(): """Fixture for a set of general input parameters for band structure calculations.""" general_parameters = AttributeDict() general_parameters.bands = AttributeDict() general_parameters.bands.decompose_bands = False general_parameters.bands.decompose_wave = False return general_parameters
def test_orbital_projections(): # pylint: disable=too-many-statements """Test the parameters associated with orbital projections.""" parameters = AttributeDict() parameters.bands = AttributeDict() parameters.bands.decompose_wave = True massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 5 parameters.bands.decompose_wave = False parameters.bands.decompose_bands = True parameters.bands.decompose_auto = True massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 14 parameters.bands.decompose_auto = False massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 10 parameters.bands.lm = True massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 11 parameters.bands.phase = True massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 12 parameters.bands.lm = False massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 12 # Now do the once with a Wigner-Seitz radius supplied parameters.bands.wigner_seitz_radius = [2.0] parameters.bands.lm = False parameters.bands.phase = False massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 0 print(massager.parameters.rwigs) assert int(massager.parameters.rwigs[0]) == 2 parameters.bands.lm = True massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 1 parameters.bands.phase = True massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 2 parameters.bands.lm = False massager = ParametersMassage(None, parameters) assert massager.exit_code is None assert massager.parameters.lorbit == 2 # Should raise ValueError if Wigner-Seitz radius is not defined as a list. parameters.bands.wigner_seitz_radius = 2.0 with pytest.raises(ValueError): massager = ParametersMassage(None, parameters)
def test_inherit_and_merge(): """Test the inherit and merge functionality for the parameters and inputs.""" from aiida.plugins import DataFactory from aiida_vasp.assistant.parameters import inherit_and_merge_parameters inputs = AttributeDict() inputs.bands = AttributeDict() inputs.bands.somekey = DataFactory('bool')(True) inputs.relax = AttributeDict() inputs.relax.somekey = DataFactory('bool')(True) inputs.smearing = AttributeDict() inputs.smearing.somekey = DataFactory('bool')(True) inputs.charge = AttributeDict() inputs.charge.somekey = DataFactory('bool')(True) inputs.converge = AttributeDict() inputs.converge.somekey = DataFactory('bool')(True) inputs.electronic = AttributeDict() inputs.electronic.somekey = DataFactory('bool')(True) inputs.dynamics = AttributeDict() inputs.dynamics.somekey = DataFactory('bool')(True) # Check that parameters does not have to be present parameters = inherit_and_merge_parameters(inputs) # Check that an empty parameters is allowed inputs.parameters = DataFactory('dict')(dict={}) parameters = inherit_and_merge_parameters(inputs) test_parameters = AttributeDict({ 'electronic': AttributeDict({'somekey': True}), 'bands': AttributeDict({'somekey': True}), 'smearing': AttributeDict({'somekey': True}), 'charge': AttributeDict({'somekey': True}), 'relax': AttributeDict({'somekey': True}), 'converge': AttributeDict({'somekey': True}), 'dynamics': AttributeDict({'somekey': True}) }) assert parameters == test_parameters # Test ignored inputs.ignored = AttributeDict() inputs.ignored.ignored = DataFactory('bool')(True) parameters = inherit_and_merge_parameters(inputs) assert parameters == test_parameters # Test to override inputs.bands.somekey inputs.parameters = DataFactory('dict')(dict={'bands': {'somekey': False}}) parameters = inherit_and_merge_parameters(inputs) test_parameters.bands.somekey = False assert parameters == test_parameters