def test_same_potcar_symbol(self): # Same symbol different hash thus a different potcar #Correct Hash Correct Symbol entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) #Incorrect Hash Correct Symbol entry2 = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'DifferentHash'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) compat = MITCompatibility() self.assertEqual(len(compat.process_entries([entry, entry2])), 2) self.assertEqual(len(self.compat.process_entries([entry, entry2])), 1)
def test_same_potcar_symbol(self): # Same symbol different hash thus a different potcar #Correct Hash Correct Symbol entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) #Incorrect Hash Correct Symbol entry2 = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'DifferentHash'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) compat = MITCompatibility() self.assertEqual(len(compat.process_entries([entry, entry2])), 2) self.assertEqual(len(self.compat.process_entries([entry, entry2])), 1)
class MITCompatibilityTest(unittest.TestCase): def setUp(self): self.compat = MITCompatibility(check_potcar_hash=True) self.ggacompat = MITCompatibility("GGA", check_potcar_hash=True) self.entry_O = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) self.entry_F = ComputedEntry( 'FeF3', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'F': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE F 08Apr2002', 'hash': '180141c33d032bfbfff30b3bea9d23dd'}]}) self.entry_S = ComputedEntry( 'FeS2', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 1.9, 'S': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE S 08Apr2002', 'hash': 'd368db6899d8839859bbee4811a42a88'}]}) def test_process_entry(self): #Correct parameters self.assertIsNotNone(self.compat.process_entry(self.entry_O)) self.assertIsNotNone(self.compat.process_entry(self.entry_F)) def test_correction_value(self): #Check actual correction self.assertAlmostEqual(self.compat.process_entry(self.entry_O).correction, - 1.723 * 2 -0.66975*3) self.assertAlmostEqual(self.compat.process_entry(self.entry_F).correction, -1.723) self.assertAlmostEqual(self.compat.process_entry(self.entry_S).correction, -1.113) def test_U_value(self): # MIT should have a U value for Fe containing sulfides self.assertIsNotNone(self.compat.process_entry(self.entry_S)) # MIT should not have a U value for Ni containing sulfides entry = ComputedEntry( 'NiS2', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Ni': 1.9, 'S': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Ni 06Sep2000', 'hash': '653f5772e68b2c7fd87ffd1086c0d710'}, {'titel': 'PAW_PBE S 08Apr2002', 'hash': 'd368db6899d8839859bbee4811a42a88'}]}) self.assertIsNone(self.compat.process_entry(entry)) entry = ComputedEntry( 'NiS2', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': None, 'run_type': 'GGA', 'potcar_spec': [{'titel':'PAW_PBE Ni 06Sep2000', 'hash': '653f5772e68b2c7fd87ffd1086c0d710'}, {'titel': 'PAW_PBE S 08Apr2002', 'hash': 'd368db6899d8839859bbee4811a42a88'}]}) self.assertIsNotNone(self.ggacompat.process_entry(entry)) def test_wrong_U_value(self): #Wrong U value entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 5.2, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) self.assertIsNone(self.compat.process_entry(entry)) #GGA run entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': False, 'hubbards': None, 'run_type': 'GGA', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) self.assertIsNone(self.compat.process_entry(entry)) self.assertIsNotNone(self.ggacompat.process_entry(entry)) def test_wrong_psp(self): #Wrong psp entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe_pv 06Sep2000', 'hash': '994537de5c4122b7f1b77fb604476db4'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) self.assertIsNone(self.compat.process_entry(entry)) def test_element_processing(self): #Testing processing of elements. entry = ComputedEntry( 'O', -1, 0.0, parameters={'is_hubbard': False, 'hubbards': {}, 'potcar_spec': [{'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}], 'run_type': 'GGA'}) entry = self.compat.process_entry(entry) self.assertAlmostEqual(entry.energy, -1) def test_same_potcar_symbol(self): # Same symbol different hash thus a different potcar #Correct Hash Correct Symbol entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': '9530da8244e4dac17580869b4adab115'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) #Incorrect Hash Correct Symbol entry2 = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'DifferentHash'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7a25bc5b9a5393f46600a4939d357982'}]}) compat = MITCompatibility() self.assertEqual(len(compat.process_entries([entry, entry2])), 2) self.assertEqual(len(self.compat.process_entries([entry, entry2])), 1) def test_revert_to_symbols(self): #Test that you can revert to potcar_symbols if potcar_spec is not present compat = MITCompatibility() entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_symbols': ['PAW_PBE Fe 06Sep2000', 'PAW_PBE O 08Apr2002']}) self.assertIsNotNone(compat.process_entry(entry)) #raise if check_potcar_hash is set self.assertRaises(ValueError, self.compat.process_entry, entry) def test_potcar_doenst_match_structure(self): compat = MITCompatibility() entry = ComputedEntry( 'Li2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_symbols': ['PAW_PBE Fe_pv 06Sep2000', 'PAW_PBE O 08Apr2002']}) self.assertIsNone(compat.process_entry(entry)) def test_potcar_spec_is_none(self): compat = MITCompatibility(check_potcar_hash=True) entry = ComputedEntry( 'Li2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [None, None]}) self.assertIsNone(compat.process_entry(entry))
class MITCompatibilityTest(unittest.TestCase): def setUp(self): self.compat = MITCompatibility(check_potcar_hash=True) self.ggacompat = MITCompatibility("GGA", check_potcar_hash=True) self.entry_O = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) self.entry_F = ComputedEntry( 'FeF3', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'F': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE F 08Apr2002', 'hash': '9b0fd56137ce81cfee1eb63a8901c66c'}]}) self.entry_S = ComputedEntry( 'FeS2', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 1.9, 'S': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE S 08Apr2002', 'hash': 'f7f8e4a74a6cbb8d63e41f4373b54df2'}]}) def test_process_entry(self): #Correct parameters self.assertIsNotNone(self.compat.process_entry(self.entry_O)) self.assertIsNotNone(self.compat.process_entry(self.entry_F)) def test_correction_value(self): #Check actual correction self.assertAlmostEqual(self.compat.process_entry(self.entry_O).correction, - 1.723 * 2 -0.66975*3) self.assertAlmostEqual(self.compat.process_entry(self.entry_F).correction, -1.723) self.assertAlmostEqual(self.compat.process_entry(self.entry_S).correction, -1.113) def test_U_value(self): # MIT should have a U value for Fe containing sulfides self.assertIsNotNone(self.compat.process_entry(self.entry_S)) # MIT should not have a U value for Ni containing sulfides entry = ComputedEntry( 'NiS2', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Ni': 1.9, 'S': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Ni 06Sep2000', 'hash': '6aa314a5314ececec9e6f32bd9a47a67'}, {'titel': 'PAW_PBE S 08Apr2002', 'hash': 'f7f8e4a74a6cbb8d63e41f4373b54df2'}]}) self.assertIsNone(self.compat.process_entry(entry)) entry = ComputedEntry( 'NiS2', -2, 0.0, parameters={'is_hubbard': True, 'hubbards': None, 'run_type': 'GGA', 'potcar_spec': [{'titel':'PAW_PBE Ni 06Sep2000', 'hash': '6aa314a5314ececec9e6f32bd9a47a67'}, {'titel': 'PAW_PBE S 08Apr2002', 'hash': 'f7f8e4a74a6cbb8d63e41f4373b54df2'}]}) self.assertIsNotNone(self.ggacompat.process_entry(entry)) def test_wrong_U_value(self): #Wrong U value entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 5.2, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) self.assertIsNone(self.compat.process_entry(entry)) #GGA run entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': False, 'hubbards': None, 'run_type': 'GGA', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) self.assertIsNone(self.compat.process_entry(entry)) self.assertIsNotNone(self.ggacompat.process_entry(entry)) def test_wrong_psp(self): #Wrong psp entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe_pv 06Sep2000', 'hash': '994537de5c4122b7f1b77fb604476db4'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) self.assertIsNone(self.compat.process_entry(entry)) def test_element_processing(self): #Testing processing of elements. entry = ComputedEntry( 'O', -1, 0.0, parameters={'is_hubbard': False, 'hubbards': {}, 'potcar_spec': [{'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}], 'run_type': 'GGA'}) entry = self.compat.process_entry(entry) self.assertAlmostEqual(entry.energy, -1) def test_same_potcar_symbol(self): # Same symbol different hash thus a different potcar #Correct Hash Correct Symbol entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'e0051a21ce51eb34a52e9153c17aa32d'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) #Incorrect Hash Correct Symbol entry2 = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [{'titel':'PAW_PBE Fe 06Sep2000', 'hash': 'DifferentHash'}, {'titel': 'PAW_PBE O 08Apr2002', 'hash': '7af704ddff29da5354831c4609f1cbc5'}]}) compat = MITCompatibility() self.assertEqual(len(compat.process_entries([entry, entry2])), 2) self.assertEqual(len(self.compat.process_entries([entry, entry2])), 1) def test_revert_to_symbols(self): #Test that you can revert to potcar_symbols if potcar_spec is not present compat = MITCompatibility() entry = ComputedEntry( 'Fe2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_symbols': ['PAW_PBE Fe 06Sep2000', 'PAW_PBE O 08Apr2002']}) self.assertIsNotNone(compat.process_entry(entry)) #raise if check_potcar_hash is set self.assertRaises(ValueError, self.compat.process_entry, entry) def test_potcar_doenst_match_structure(self): compat = MITCompatibility() entry = ComputedEntry( 'Li2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_symbols': ['PAW_PBE Fe_pv 06Sep2000', 'PAW_PBE O 08Apr2002']}) self.assertIsNone(compat.process_entry(entry)) def test_potcar_spec_is_none(self): compat = MITCompatibility(check_potcar_hash=True) entry = ComputedEntry( 'Li2O3', -1, 0.0, parameters={'is_hubbard': True, 'hubbards': {'Fe': 4.0, 'O': 0}, 'run_type': 'GGA+U', 'potcar_spec': [None, None]}) self.assertIsNone(compat.process_entry(entry))