From 40d6f37a5a4633b8f1a95ea31af853535d0f49f5 Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Sun, 1 Dec 2024 14:57:32 -0500 Subject: [PATCH 1/9] Change oxidation state defaults to icsd24 --- smact/screening.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/smact/screening.py b/smact/screening.py index 65332afe..05a5511d 100644 --- a/smact/screening.py +++ b/smact/screening.py @@ -335,7 +335,7 @@ def smact_filter( threshold: int | None = 8, stoichs: list[list[int]] | None = None, species_unique: bool = True, - oxidation_states_set: str = "smact14", + oxidation_states_set: str = "icsd24", comp_tuple: bool = False, ) -> list[tuple[str, int, int]] | list[tuple[str, int]]: """Function that applies the charge neutrality and electronegativity @@ -438,7 +438,7 @@ def smact_validity( composition: pymatgen.core.Composition | str, use_pauling_test: bool = True, include_alloys: bool = True, - oxidation_states_set: str | bytes | os.PathLike = "smact14", + oxidation_states_set: str | bytes | os.PathLike = "icsd24", ) -> bool: """ Check if a composition is valid according to the SMACT rules. @@ -486,13 +486,13 @@ def smact_validity( smact_elems = [e[1] for e in space.items()] electronegs = [e.pauling_eneg for e in smact_elems] - if oxidation_states_set == "smact14" or oxidation_states_set is None: + if oxidation_states_set == "smact14": ox_combos = [e.oxidation_states_smact14 for e in smact_elems] elif oxidation_states_set == "icsd16": ox_combos = [e.oxidation_states_icsd16 for e in smact_elems] elif oxidation_states_set == "pymatgen_sp": ox_combos = [e.oxidation_states_sp for e in smact_elems] - elif oxidation_states_set == "icsd24": + elif oxidation_states_set == "icsd24" or oxidation_states_set is None: # Default ox_combos = [e.oxidation_states_icsd24 for e in smact_elems] elif os.path.exists(oxidation_states_set): ox_combos = [oxi_custom(e.symbol, oxidation_states_set) for e in smact_elems] From eeb4ba995716240e35aca73c7b62220fea1a45d4 Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Sun, 1 Dec 2024 14:57:50 -0500 Subject: [PATCH 2/9] Update smact_validity and smact_filter functions --- smact/tests/test_core.py | 49 ++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/smact/tests/test_core.py b/smact/tests/test_core.py index b99209f9..74cad9da 100755 --- a/smact/tests/test_core.py +++ b/smact/tests/test_core.py @@ -335,31 +335,50 @@ def test_ml_rep_generator(self): self.assertEqual(smact.screening.ml_rep_generator([Pb, O], [1, 2]), PbO2_ml) def test_smact_filter(self): + oxidation_states_sets = ["smact14", "icsd24"] + oxidation_states_sets_results = { + "smact14": { + "thresh_2": [ + (("Na", "Fe", "Cl"), (1, -1, -1), (2, 1, 1)), + (("Na", "Fe", "Cl"), (1, 1, -1), (1, 1, 2)), + ] + }, + "icsd24": {"thresh_2": [(("Na", "Fe", "Cl"), (1, 1, -1), (1, 1, 2))]}, + } + Na, Fe, Cl = (smact.Element(label) for label in ("Na", "Fe", "Cl")) - result = smact.screening.smact_filter([Na, Fe, Cl], threshold=2) - self.assertEqual( - [(r[0], r[1], r[2]) for r in result], - [ - (("Na", "Fe", "Cl"), (1, -1, -1), (2, 1, 1)), - (("Na", "Fe", "Cl"), (1, 1, -1), (1, 1, 2)), - ], - ) + + for ox_state_set in oxidation_states_sets: + with self.subTest(ox_state_set=ox_state_set): + output = smact.screening.smact_filter([Na, Fe, Cl], threshold=2, oxidation_states_set=ox_state_set) + self.assertEqual( + [(r[0], r[1], r[2]) for r in output], + oxidation_states_sets_results[ox_state_set]["thresh_2"], + ) + + # Test that reading the oxidation states from a file produces the same results self.assertEqual( - result, + smact.screening.smact_filter([Na, Fe, Cl], threshold=2, oxidation_states_set="smact14"), smact.screening.smact_filter([Na, Fe, Cl], threshold=2, oxidation_states_set=TEST_OX_STATES), ) self.assertEqual( - set(smact.screening.smact_filter([Na, Fe, Cl], threshold=2, species_unique=False)), + set( + smact.screening.smact_filter( + [Na, Fe, Cl], threshold=2, species_unique=False, oxidation_states_set="smact14" + ) + ), { (("Na", "Fe", "Cl"), (2, 1, 1)), (("Na", "Fe", "Cl"), (1, 1, 2)), }, ) - self.assertEqual(len(smact.screening.smact_filter([Na, Fe, Cl], threshold=8)), 77) + self.assertEqual( + len(smact.screening.smact_filter([Na, Fe, Cl], threshold=8, oxidation_states_set="smact14")), 77 + ) - result = smact.screening.smact_filter([Na, Fe, Cl], stoichs=[[1], [1], [4]]) + result = smact.screening.smact_filter([Na, Fe, Cl], stoichs=[[1], [1], [4]], oxidation_states_set="smact14") self.assertEqual( [(r[0], r[1], r[2]) for r in result], [ @@ -368,7 +387,7 @@ def test_smact_filter(self): ) stoichs = [list(range(1, 5)), list(range(1, 5)), list(range(1, 10))] self.assertEqual( - len(smact.screening.smact_filter([Na, Fe, Cl], stoichs=stoichs)), + len(smact.screening.smact_filter([Na, Fe, Cl], stoichs=stoichs, oxidation_states_set="smact14")), 45, ) @@ -380,8 +399,8 @@ def test_smact_validity(self): # Test for single element self.assertTrue(smact.screening.smact_validity("Al")) - # Test for MgB2 which is invalid for the default oxi states but valid for the icsd states - self.assertFalse(smact.screening.smact_validity("MgB2")) + # Test for MgB2 which is invalid for the smact14 oxi states but valid for the icsd states + self.assertFalse(smact.screening.smact_validity("MgB2", oxidation_states_set="smact14")) self.assertTrue(smact.screening.smact_validity("MgB2", oxidation_states_set="icsd16")) self.assertFalse(smact.screening.smact_validity("MgB2", oxidation_states_set="pymatgen_sp")) self.assertTrue(smact.screening.smact_validity("MgB2", oxidation_states_set="wiki")) From aa57941568386d0d72f68bcb71655b7cbfe06cab Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Sun, 1 Dec 2024 16:15:50 -0500 Subject: [PATCH 3/9] Add option to select oxidation states list in crystal space --- .../utils/crystal_space/generate_composition_with_smact.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/smact/utils/crystal_space/generate_composition_with_smact.py b/smact/utils/crystal_space/generate_composition_with_smact.py index 690b6292..d22bf99b 100644 --- a/smact/utils/crystal_space/generate_composition_with_smact.py +++ b/smact/utils/crystal_space/generate_composition_with_smact.py @@ -44,6 +44,7 @@ def generate_composition_with_smact( max_atomic_num: int = 103, num_processes: int | None = None, save_path: str | None = None, + oxidation_states_set: str = "icsd24", ) -> pd.DataFrame: """ Generate all possible compositions of a given number of elements and @@ -55,6 +56,7 @@ def generate_composition_with_smact( max_atomic_num (int): the maximum atomic number. Defaults to 103. num_processes (int): the number of processes to use. Defaults to None. save_path (str): the path to save the results. Defaults to None. + oxidation_states_set (str): the oxidation states set to use. Options are "smact14", "icsd16", "icsd24", "pymatgen_sp" or a filepath to a custom oxidation states list. For reproducing the Faraday Discussions results, use "smact14". Returns: df (pd.DataFrame): A DataFrame of SMACT-generated compositions with boolean smact_allowed column. @@ -104,7 +106,10 @@ def generate_composition_with_smact( pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() if num_processes is None else num_processes) results = list( tqdm( - pool.imap_unordered(partial(smact_filter, threshold=max_stoich), compounds_pauling), + pool.imap_unordered( + partial(smact_filter, threshold=max_stoich, oxidation_states_set=oxidation_states_set), + compounds_pauling, + ), total=len(compounds_pauling), ) ) From 62a8ff9e1efb4cd4e5dc01be0171c20082376e8e Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Sun, 1 Dec 2024 16:16:23 -0500 Subject: [PATCH 4/9] Set oxidation states to smact14 for reproducibility with FD publication --- docs/tutorials/crystal_space.ipynb | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tutorials/crystal_space.ipynb b/docs/tutorials/crystal_space.ipynb index 76de9f28..d61b3315 100644 --- a/docs/tutorials/crystal_space.ipynb +++ b/docs/tutorials/crystal_space.ipynb @@ -102,6 +102,7 @@ " max_atomic_num=103,\n", " num_processes=8,\n", " save_path=\"data/binary/df_binary_label.pkl\",\n", + " oxidation_states_set=\"smact14\"\n", ")" ] }, From 56a3ef22e01ad205eba718bb5ef7b330cd9fbe7a Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Sun, 1 Dec 2024 16:17:01 -0500 Subject: [PATCH 5/9] Use smact14 oxidation states for consistency in GNoME example --- docs/tutorials/smact_validity_of_GNoMe.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/tutorials/smact_validity_of_GNoMe.ipynb b/docs/tutorials/smact_validity_of_GNoMe.ipynb index e87a6808..eae40341 100644 --- a/docs/tutorials/smact_validity_of_GNoMe.ipynb +++ b/docs/tutorials/smact_validity_of_GNoMe.ipynb @@ -237,7 +237,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "16fd0c26938f4483abee04fbcb7fe750", + "model_id": "15bda5d7186b4c3aaf19ea3fa7e51d7e", "version_major": 2, "version_minor": 0 }, @@ -344,7 +344,7 @@ ], "source": [ "# Run the SMACT validity test on the GNoME materials\n", - "df[\"smact_valid\"] = df[\"Composition\"].parallel_apply(smact_validity) # Alloys will pass the test\n", + "df[\"smact_valid\"] = df[\"Composition\"].parallel_apply(smact_validity,**{\"oxidation_states_set\":\"smact14\"}) # Alloys will pass the test\n", "df.head()" ] }, @@ -370,7 +370,7 @@ "outputs": [ { "data": { - "image/png": "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VlX//v3j3UezZs20f/9+rV69Wj/++KM2bNigDh062JcvX75czZo1U6dOnbRv3z5NmjRJ48aN0+eff25fJ0WKFOrWrZs2bNiggwcPasCAARowYIC+/PJL+zrXrl1TSEiIPDw8tHz5ch04cEBjx45V6tSp/4XKwJXcn/ULnjhxQiEhIfL19dXw4cMVEBAgLy8v7d27V19++aUyZ86s119/3b5+0qRJ9e6772r9+vWWXztr1qyaPn26SpcubW9bvHixUqZMqatXr8ZZf/r06apatapD25POpD9J/fr1FRkZqZkzZypnzpy6cOGCfv75Z125csVpXxs3bmxv27Jli86fP68UKVI43fe0adP0zjvvaNq0aerbt6/DslOnTtnr/vHHHysgIEBRUVFauXKlunbtqj179ig8PNy+fo8ePRQREaHp06fb29KkSWPp2J9WsmTJlCxZsmfyWgAAvIhq1arl8Pyjjz7S5MmTtWXLFhUqVEg9e/aUpHhPCh48eFArVqzQtm3bFBQUJEn67LPPVL16dY0ZM0aZMmXSrFmzVKdOHXXq1EmSlDNnTvXr10+jRo1S165dZbPZVLRoURUtWtS+3+zZs+v777/XL7/8Yg8po0aNsn+viZUjR45/qhR4jjzzKxZdunSRu7u7tm/froYNG6pAgQLKmTOnateurZ9++inOG6VDhw7asmWLli1bFu8+Y2JiNGzYMGXJkkVeXl4qUqSIVqxYEWe9li1bav78+bp79669bdq0aWrZsqXT/fr6+srPz8/hkTRp0r955NL169f1yy+/aNSoUapQoYL8/f1VsmRJ9evXzyFMSQ/PIqxfv15//PGHQ1+bNWsmd/e4eXD9+vW6e/euhg0bpoiICG3atMlheZcuXWSz2bR161bVr19fefPmVaFChdSrVy9t2bJFnp6eDseZLFky+xWV2Ienp2ec1y1Tpozeffddh7ZLly7Jw8NDGzZskCTNmjVLQUFB8vb2lp+fn5o2baqLFy/GWydnt0KNHDlSGTJkkLe3t9q2bat79+7Fuz0AAIlJdHS05s+fr9u3bys4OPipttm8ebN8fX3toUKSKlWqJDc3N/3222+SHt7V8efvPcmSJdOZM2d0+vRpp/vdtWuXNm3apHLlytnbli5dqqCgIL3xxht66aWXVLRoUX311Vd/9TDxAnimweLKlStatWqVunbtGu9Zd5vN5vA8R44c6tSpk/r166eYmBin24wfP15jx47VmDFjtGfPHoWGhur111/X0aNHHdYrXry4smfPrkWLFkmSfv/9d23YsEHNmzf/B47uyVKmTKmUKVNqyZIlun///mPXzZAhg0JDQzVz5kxJDy9pLliwQG3atHG6/tSpU9WkSRN5eHioSZMmmjp1qn3Z1atXtWLFinjrbuUqTLNmzTR//nwZY+xtCxYsUKZMmfTqq69KkqKiovTBBx9o9+7dWrJkiU6dOqVWrVo99Wt8++23GjJkiIYPH67t27crY8aMmjRp0t/uMwAACcHevXuVMmVKeXl5qVOnTlq8eLEKFiz4VNueP39eL730kkObu7u70qRJo/Pnz0uSQkND9f333+vnn39WTEyMjhw5orFjx0qSw10Okuwnd4OCgtS1a1e1a9fOvuzEiROaPHmy8uTJo5UrV6pz587q3r27/TsOEo5nGiyOHTsmY4zy5cvn0J4uXTr7l+4/n/2WpAEDBujkyZOaM2eO0/2OGTNG7777rho3bqx8+fJp1KhRKlKkiD799NM467Zp00bTpk2T9PDMePXq1ZU+fXqn+23SpIm9X7GP33///S8e9f+4u7trxowZmjlzpnx9fRUSEqL+/ftrz549Ttdv06aNZsyYIWOMvvvuO+XKlcvpgOWIiAh99913evPNNyVJb775pr799lv7AKzYuufPn/9v9z0+DRs21Llz5/Trr7/a2+bOnasmTZrYQ2KbNm1UrVo15cyZU6VLl9aECRO0fPnyOAPE4vPpp5+qbdu2atu2rfLly6cPP/zwiR+c9+/fV0REhMMDAICEJF++fAoLC9Nvv/2mzp07q2XLljpw4MA/tv/27durW7duqlmzpjw9PVW6dGn7Ldpubo5fIX/55Rdt375dX3zxhT799FPNmzfPviwmJkbFihXT8OHDVbRoUXXo0EHt27fXF1988Y/1Fc+H52JWqK1btyosLEyFChVyeiY/ffr06tOnjwYNGqTIyEiHZRERETp37pxCQkIc2kNCQnTw4ME4+3rzzTe1efNmnThxQjNmzIj3CoAkjRs3TmFhYQ6PTJkyOV23U6dODgEkPvXr19e5c+e0dOlSVa1aVevWrVOxYsWcDsauUaOGbt26pQ0bNmjatGnx9nXevHnKlSuXChcuLEkqUqSI/P39tWDBAklyuJrwT0ufPr2q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r7+uo0ePOqxXvHhxZc+e3X4P2u+//64NGzaoefPmT3sI8Vq0aJHGjRunKVOm6OjRo1qyZIkCAgIkSd9//72yZMmiYcOG2S8lSdK9e/dUvHhx/fTTT9q3b586dOig5s2ba+vWrQ77njlzptzd3bV161aNHz9en3zyib7++ut4+/LGG2/o4sWLWr58uXbs2KFixYrptddec3pV5lGDBw/WgAEDtHPnTrm7u6tp06Z65513NH78eP3yyy86duyYBg0aZF//5s2batmypX799Vdt2bJFefLkUfXq1XXz5k1JD4OH9PDKT3h4uP35L7/8ohYtWqhHjx46cOCApkyZohkzZuijjz5y6M+QIUNUt25d7d27V23atInT36etX6zt27ere/fuGjZsmA4fPqwVK1aobNmyj60JAACAK+zdu1cpU6aUl5eXOnXqpMWLF6tgwYKSpG+//VZRUVFKmzatvLy81LFjRy1evFi5c+eW9PCEd6tWrdSpUycFBQU53X+OHDm0atUq9e/fX15eXvL19dWZM2f07bffOl3/3LlzWr58udq1a/fvHPD/e+pgcezYMRljlC9fPof2dOnSKWXKlEqZMqXefffdONsNGDBAJ0+e1Jw5c5zud8yYMXr33XfVuHFj5cuXT6NGjVKRIkWcjmlo06aNpk2bJkmaMWOGqlevrvTp0zvdb5MmTez9in38/vvvTtf9/fff5efnp0qVKilbtmwqWbKk2rdvL0lKkyaNkiRJIm9vb/uVD0nKnDmz+vTpoyJFiihnzpx66623VLVq1Tj/oFmzZtW4ceOUL18+NWvWTG+99ZbGjRvntB+//vqrtm7dqoULFyooKEh58uTRmDFj5Ovrq++++87pNrH69Omj0NBQFShQQD169NCOHTs0cOBAhYSEqGjRomrbtq3Wrl1rX79ixYp68803lT9/fhUoUEBffvml7ty5Y79tLbausVd+Yp8PHTpU7733nlq2bKmcOXOqcuXK+uCDDzRlyhSH/jRt2lStW7dWzpw5lS1btjj9fdr6PfpvlCJFCtWsWVP+/v4qWrSo/aqSM/fv31dERITDAwAA4FnIly+fwsLC9Ntvv6lz585q2bKlDhw4IEkaOHCgrl+/rv/+97/avn27evXqpYYNG2rv3r2SpM8++0w3b95Uv3794t3/+fPn1b59e7Vs2VLbtm3T+vXr5enpqQYN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unjxon3CDC8vL/tndHBwsP3vCR21ieu5fh/969EFcKEdO3aYcuXKGX9/f5MrVy6TN29es3PnTld367myd+9eU6VKFVOgQAFTvXp1M2DAAPuyLl26mKRJk5rp06eba9eu2durV69uBg4c6ILeus6ePXtMjhw5TKFChUySJElMjRo17APZ9+3bZ3Lnzm2KFCliwsLCzM2bN40xxnTs2NG89tpr5u7du67s+r+KusR15MgRkypVKvPmm2+ajz76yJQpU8YULVrUdOjQwdy7d89cunTJNGvWzNhsNvP++++bTz75xPTq1cukSpXKHDlyxNXd/9dQF+f27Nlj8ufPbwoVKmQ8PT1N27ZtzbJly4wxxvz4448mY8aM5rXXXjM3btywX/lr3bq1qVu3rsMZ6YSI2sT1vL+PCBZI8G7cuGFOnjxp9uzZ43BbFIw5fvy4SZMmjenatav54osvTKdOnUyuXLnMq6++aqKjo40xxvTq1cskS5bMNGvWzPTu3dt07tzZ+Pj4JKqZfS5cuGD8/f3N22+/bY4fP26WLVtmWrdubbJkyWJGjBhhjDHm1KlTpnTp0iZbtmymcOHCplq1asbb29uEhYW5uPf/Huri3NChQ03dunXtz6OioszYsWNNsWLFzJtvvmm/vXDSpEmmVKlSplixYua1114zu3btclGPnw3qEld8M/AVK1bMfPPNN8YYY9auXWvy5MljsmXLZkJDQ02dOnVMihQpzJ49e1zc+38XtXHueX8fESyAROzrr7825cuXt38QRUZGmjVr1phcuXKZUqVK2debOXOm6dixoyldurRp3Lix2b17t6u67BLbt283L7/8ssM0hqdPnzYffPCBSZMmjRk7dqy9fdq0aeaDDz4ww4cPN4cPH3ZFd58Z6uJc165dTVBQkEPbvXv3zKRJk0yJEiXMoEGD7GdXr127ZqKiosytW7dc0dVnirrEtWLFClO4cGFz48YNe9uuXbtMx44dTYECBcz8+fONMcZER0ebYcOGme7du5vevXsnihM71Ma55/19RLAAErHBgwcbf39/h7aYmBizefNmkzNnTlOnTh17e3R0tHnw4EGcwdyJQVhYmEmWLJlZuXKlQ/v58+fNwIEDzcsvvxxnWWJAXRzFXuX76quvTIkSJczu3bsdbsW4deuW6dmzpylWrJj96mnsNgkZdYnfzz//bHx9fc32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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAJOCAYAAAAqFJGJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABleklEQVR4nO3dd3RU1d7G8WdCCi0hNAk19GpCCyVEaQKhSpUqvRcBKSpIV2mCCAqISpMuIlxU6pWmFKmh96ZA6CX0hGS/f/BmLmMmgB5lIPl+1poFs0+ZfX4wk3nOOXvHZowxAgAAAAAL3FzdAQAAAAAvPoIFAAAAAMsIFgAAAAAsI1gAAAAAsIxgAQAAAMAyggUAAAAAywgWAAAAACwjWAAAAACwjGABAAAAwDKCBQAAidipU6dks9k0Y8aMf2X/2bNnV6tWrf6VfQN4vhAsAADPhZMnT6pbt27KmzevkidPruTJk6tgwYLq2rWr9uzZ47DukCFDZLPZlCFDBt25cyfOvrJnz66aNWv+rX5kz55dNptNlSpVcrr8q6++ks1mk81m0/bt2+P0Kb7H+fPn/1Z/AOBF4e7qDgAA8OOPP6pRo0Zyd3dXs2bNVLhwYbm5uenQoUP6/vvvNXnyZJ08eVL+/v4O2128eFGTJ09W7969/9H+JE2aVGvXrtX58+fl5+fnsGzOnDlKmjSp7t2753TbyZMnK2XKlHHafX19/9E+vigOHz4sNzfOYwKJAcECAOBSx48fV+PGjeXv76+ff/5ZGTNmdFg+atQoTZo0yemX0yJFiujjjz9Wly5dlCxZsn+sTyEhIdq2bZsWLFigHj162NvPnDmjX375RXXr1tWiRYucbtugQQOlS5fuH+vLi87Ly8vVXQDwjHAKAQDgUqNHj9bt27c1ffr0OKFCktzd3dW9e3dlzZo1zrJBgwbpwoULmjx58hNf5/bt2+rdu7eyZs0qLy8v5cuXT2PGjJExJs66SZMmVb169TR37lyH9nnz5il16tQKDQ39C0f4dKZPn66KFSvqpZdekpeXlwoWLOj0uGJv8/r1119VsmRJJU2aVDlz5tQ333zjsN7Vq1fVp08fBQQEKGXKlPLx8VG1atW0e/fuJ/bDZrNp165dcZYNHz5cSZIk0dmzZyVJR48eVf369eXn56ekSZMqS5Ysaty4sW7cuOHQ30fHWERFRWno0KHKkyePkiZNqrRp0+qVV17R6tWr/0q5ADyHuGIBAHCpH3/8Ublz51apUqX+8ravvvqqKlasqNGjR6tz587xXrUwxuj111/X2rVr1bZtWxUpUkQrV65U3759dfbsWY0bNy7ONk2bNlWVKlV0/Phx5cqVS5I0d+5cNWjQQB4eHvH26erVq3Ha3N3dn3gr1OTJk1WoUCG9/vrrcnd31w8//KAuXbooJiZGXbt2dVj32LFjatCggdq2bauWLVtq2rRpatWqlYoXL65ChQpJkk6cOKElS5bojTfeUI4cOXThwgVNmTJF5cqV04EDB5QpUyan/WjQoIG6du2qOXPmqGjRog7L5syZo/Llyytz5syKjIxUaGio7t+/r7feekt+fn46e/asfvzxR12/fl2pUqVyuv8hQ4ZoxIgRateunUqWLKmIiAht375dO3fuVOXKlR9bIwDPOQMAgIvcuHHDSDJ16tSJs+zatWvm0qVL9sedO3fsywYPHmwkmUuXLpn169cbSeaTTz6xL/f39zc1atSwP1+yZImRZD788EOH12jQoIGx2Wzm2LFjcbZ98OCB8fPzMx988IExxpgDBw4YSWb9+vVm+vTpRpLZtm1bnD45e+TLl++JtXj0+GKFhoaanDlzOrT5+/sbSWbDhg32tosXLxovLy/Tu3dve9u9e/dMdHS0w7YnT540Xl5eZtiwYQ5tksz06dPtbU2aNDGZMmVy2H7nzp0O6+3atctIMgsXLnzscfn7+5uWLVvanxcuXNjh3wZAwsGtUAAAl4mIiJAkp4Ody5cvr/Tp09sfEydOdLqPsmXLqkKFCho9erTu3r3rdJ1ly5YpSZIk6t69u0N77969ZYzR8uXL42yTJEkSNWzYUPPmzZP08Gx91qxZ9eqrrz72mBYtWqTVq1c7PKZPn/7YbSQ5XG25ceOGLl++rHLlyunEiRMOtxZJUsGCBR36kT59euXLl08nTpywt3l5ednHpURHR+vKlStKmTKl8uXLp507dz62Ly1atNC5c+e0du1ae9ucOXOULFky1a9fX5LsVyRWrlzpdGau+Pj6+mr//v06evToU28D4MVAsAAAuIy3t7ck6datW3GWTZkyRatXr9bs2bOfuJ8hQ4bo/Pnz+uKLL5wuP336tDJlymR/vVgFChSwL3emadOmOnDggHbv3q25c+eqcePGstlsj+1L2bJlValSJYdHcHDwE49h48aNqlSpklKkSCFfX1+lT59e/fv3l6Q4wSJbtmxxtk+dOrWuXbtmfx4TE6Nx48YpT5488vLyUrp06ZQ+fXrt2bMnzv7+rHLlysqYMaPmzJlj39e8efNUu3Ztew1z5MihXr166euvv1a6dOkUGhqqiRMnPnHfw4YN0/Xr15U3b14FBASob9++caYTBvBiIlgAAFwmVapUypgxo/bt2xdnWalSpVSpUiWFhIQ8cT9ly5ZV+fLlH3vV4u8oVaqUcuXKpZ49e+rkyZNq2rTpP7bvRx0/flyvvfaaLl++rE8++UQ//fSTVq9erbffflvSwy/2j0qSJInT/ZhHBqIPHz5cvXr1UtmyZTV79mytXLlSq1evVqFCheLs78+SJEmipk2batGiRbp3757Wrl2rc+fO6c0333RYb+zYsdqzZ4/69++vu3fvqnv37ipUqJDOnDkT777Lli2r48ePa9q0aXr55Zf19ddfq1ixYvr6668f2ycAzz+CBQDApWrUqKFjx45p69atlvYTe9ViypQpcZb5+/vr3LlzunnzpkP7oUOH7Mvj06RJE61bt04FChRQkSJFLPUxPj/88IPu37+vpUuXqmPHjqpevboqVapkaQrd7777ThUqVNDUqVPVuHFjValSRZUqVdL169efavsWLVooIiJCP/zwg+bMmaP06dM7nQ0rICBAAwYM0IYNG/TLL7/o7Nmz8V45ipUmTRq1bt1a8+bN0x9//KHAwEANGTLkbxwlgOcJwQIA4FLvvPOOkidPrjZt2ujChQtxlhsn08E6U65cOZUvX16jRo2K88vrqlevrujoaH3++ecO7ePGjZPNZlO1atXi3W+7du00ePBgjR079qn68XfEXoF49Fhv3LjxVGMzHrfPP9du4cKF9qlinyQwMFCBgYH6+uuvtWjRIjVu3Fju7v+bTDIiIkIPHjxw2CYgIEBubm66f/9+vPu9cuWKw/OUKVMqd+7cj90GwIuB6WYBAC6VJ08ezZ07V02aNFG+fPnsv3nbGKOTJ09q7ty5cnNzU5YsWZ64r8GDB6tChQpx2mvVqqUKFSro/fff16lTp1S4cGGtWrVK//nPf9SzZ0/7dLLO+Pv7/6Wz6d99953TweiVK1dWhgwZnG5TpUoVeXp6qlatWurYsaNu3bqlr776Si+99JLCw8Of+rUfVbNmTQ0bNkytW7dWmTJltHfvXs2ZM0c5c+Z86n20aNFCffr0kaQ4t0GtWbNG3bp10xtvvKG8efPqwYMHmjVrlpIkSWIf4O1MwYIFVb58eRUvXlxp0qTR9u3b9d1336lbt25/6zgBPD8IFgAAl6tdu7b27t2rsWPHatWqVZo2bZpsNpv8/f1Vo0YNderUSYULF37ifsqXL69y5cpp/fr1Du1ubm5aunSpBg0apAULFmj69OnKnj27Pv74Y/Xu3fsfPZbOnTs7bV+7dm28wSJfvnz67rvvNGDAAPXp00d+fn7q3Lmz0qdPrzZt2vytfvTv31+3b9/W3LlztWDBAhUrVkw//fST3nvvvafeR7NmzfTuu+8qV65cKlmypMOywoULKzQ0VD/88IPOnj2r5MmTq3Dhwlq+fLlKly4d7z67d++upUuXatWqVbp//778/f314Ycfqm/fvn/rOAE8P2zmaa8xAwCAROXy5cvKmDGjBg0apIEDB7q6OwCec4yxAAAATs2YMUPR0dFq3ry5q7sC4AXArVAAAMDBmjVrdODAAX300UeqU6eOsmfP7uouAXgBcCsUAABwUL58eW3atEkhISGaPXu2MmfO7OouAXgBECwAAAAAWMYYCwAAAACWESwAAAAAWMbgbSQKMTExOnfunLy9vWWz2VzdHQAAgBeCMUY3b95UpkyZ5Ob2+GsSBAskCufOnVPWrFld3Q0AAIAX0h9//KEsWbI8dh2CBRIFb29vSQ/fFD4+Pi7uDQAAwIshIiJCWbNmtX+XehyCBRKF2NuffHx8CBYAAAB/0dPcSs7gbQAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYJm7qzsAPEsvD14pN6/kru4GAAB/y6mRNVzdBSBeXLEAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsAAAAABgGcECAAAAgGUECwAAAACWESwAAAAAWEawAAAAAGAZwQIAAACAZQQLAAAAAJYRLAAAAABYRrAAAAAAYBnBAgAAAIBlBAsAAAAAlhEsAAAAAFhGsIDLrVu3TjabTdevX5ckzZgxQ76+vo/dZsiQISpSpMi/3jcAAJ5HkydPVmBgoHx8fOTj46Pg4GAtX77cvvzLL79U+fLl5ePj4/Az9lFXr15Vs2bN5OPjI19fX7Vt21a3bt1yWOfbb79VkSJFlDx5cvn7++vjjz92WP7rr78qJCREadOmVbJkyZQ/f36NGzcuzmudPXtWb775pn29gIAAbd++/Z8pBp4bLgkW58+fV48ePZQ7d24lTZpUGTJkUEhIiCZPnqw7d+7Y18uePbtsNpu2bNnisH3Pnj1Vvnz5v/SaNpvN6b7u37+vtGnTymazad26dXHW//Nj/vz5f/l4H3Xp0iV17txZ2bJlk5eXl/z8/BQaGqqNGzfa14k9bmevVahQIdlsNs2YMSPOshEjRihJkiRx3vSxzp8/r7feeks5c+aUl5eXsmbNqlq1aunnn3+2f7l/3OPR+vybGjVqpCNHjjyT1wIA4EWUJUsWjRw5Ujt27ND27dtVsWJF1a5dW/v375ck3blzR1WrVlX//v3j3UezZs20f/9+rV69Wj/++KM2bNigDh062JcvX75czZo1U6dOnbRv3z5NmjRJ48aN0+eff25fJ0WKFOrWrZs2bNiggwcPasCAARowYIC+/PJL+zrXrl1TSEiIPDw8tHz5ch04cEBjx45V6tSp/4XKwJXcn/ULnjhxQiEhIfL19dXw4cMVEBAgLy8v7d27V19++aUyZ86s119/3b5+0qRJ9e6772r9+vWWXztr1qyaPn26SpcubW9bvHixUqZMqatXr8ZZf/r06apatapD25POpD9J/fr1FRkZqZkzZypnzpy6cOGCfv75Z125csVpXxs3bmxv27Jli86fP68UKVI43fe0adP0zjvvaNq0aerbt6/DslOnTtnr/vHHHysgIEBRUVFauXKlunbtqj179ig8PNy+fo8ePRQREaHp06fb29KkSWPp2J9WsmTJlCxZsmfyWgAAvIhq1arl8Pyjjz7S5MmTtWXLFhUqVEg9e/aUpHhPCh48eFArVqzQtm3bFBQUJEn67LPPVL16dY0ZM0aZMmXSrFmzVKdOHXXq1EmSlDNnTvXr10+jRo1S165dZbPZVLRoURUtWtS+3+zZs+v777/XL7/8Yg8po0aNsn+viZUjR45/qhR4jjzzKxZdunSRu7u7tm/froYNG6pAgQLKmTOnateurZ9++inOG6VDhw7asmWLli1bFu8+Y2JiNGzYMGXJkkVeXl4qUqSIVqxYEWe9li1bav78+bp79669bdq0aWrZsqXT/fr6+srPz8/hkTRp0r955NL169f1yy+/aNSoUapQoYL8/f1VsmRJ9evXzyFMSQ/PIqxfv15//PGHQ1+bNWsmd/e4eXD9+vW6e/euhg0bpoiICG3atMlheZcuXWSz2bR161bVr19fefPmVaFChdSrVy9t2bJFnp6eDseZLFky+xWV2Ienp2ec1y1Tpozeffddh7ZLly7Jw8NDGzZskCTNmjVLQUFB8vb2lp+fn5o2baqLFy/GWydnt0KNHDlSGTJkkLe3t9q2bat79+7Fuz0AAIlJdHS05s+fr9u3bys4OPipttm8ebN8fX3toUKSKlWqJDc3N/3222+SHt7V8efvPcmSJdOZM2d0+vRpp/vdtWuXNm3apHLlytnbli5dqqCgIL3xxht66aWXVLRoUX311Vd/9TDxAnimweLKlStatWqVunbtGu9Zd5vN5vA8R44c6tSpk/r166eYmBin24wfP15jx47VmDFjtGfPHoWGhur111/X0aNHHdYrXry4smfPrkWLFkmSfv/9d23YsEHNmzf/B47uyVKmTKmUKVNqyZIlun///mPXzZAhg0JDQzVz5kxJDy9pLliwQG3atHG6/tSpU9WkSRN5eHioSZMmmjp1qn3Z1atXtWLFinjrbuUqTLNmzTR//nwZY+xtCxYsUKZMmfTqq69KkqKiovTBBx9o9+7dWrJkiU6dOqVWrVo99Wt8++23GjJkiIYPH67t27crY8aMmjRp0t/uMwAACcHevXuVMmVKeXl5qVOnTlq8eLEKFiz4VNueP39eL730kkObu7u70qRJo/Pnz0uSQkND9f333+vnn39WTEyMjhw5orFjx0qSw10Okuwnd4OCgtS1a1e1a9fOvuzEiROaPHmy8uTJo5UrV6pz587q3r27/TsOEo5nGiyOHTsmY4zy5cvn0J4uXTr7l+4/n/2WpAEDBujkyZOaM2eO0/2OGTNG7777rho3bqx8+fJp1KhRKlKkiD799NM467Zp00bTpk2T9PDMePXq1ZU+fXqn+23SpIm9X7GP33///S8e9f+4u7trxowZmjlzpnx9fRUSEqL+/ftrz549Ttdv06aNZsyYIWOMvvvuO+XKlcvpgOWIiAh99913evPNNyVJb775pr799lv7AKzYuufPn/9v9z0+DRs21Llz5/Trr7/a2+bOnasmTZrYQ2KbNm1UrVo15cyZU6VLl9aECRO0fPnyOAPE4vPpp5+qbdu2atu2rfLly6cPP/zwiR+c9+/fV0REhMMDAICEJF++fAoLC9Nvv/2mzp07q2XLljpw4MA/tv/27durW7duqlmzpjw9PVW6dGn7Ldpubo5fIX/55Rdt375dX3zxhT799FPNmzfPviwmJkbFihXT8OHDVbRoUXXo0EHt27fXF1988Y/1Fc+H52JWqK1btyosLEyFChVyeiY/ffr06tOnjwYNGqTIyEiHZRERETp37pxCQkIc2kNCQnTw4ME4+3rzzTe1efNmnThxQjNmzIj3CoAkjRs3TmFhYQ6PTJkyOV23U6dODgEkPvXr19e5c+e0dOlSVa1aVevWrVOxYsWcDsauUaOGbt26pQ0bNmjatGnx9nXevHnKlSuXChcuLEkqUqSI/P39tWDBAklyuJrwT0ufPr2q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r7+uo0ePOqxXvHhxZc+e3X4P2u+//64NGzaoefPmT3sI8Vq0aJHGjRunKVOm6OjRo1qyZIkCAgIkSd9//72yZMmiYcOG2S8lSdK9e/dUvHhx/fTTT9q3b586dOig5s2ba+vWrQ77njlzptzd3bV161aNHz9en3zyib7++ut4+/LGG2/o4sWLWr58uXbs2KFixYrptddec3pV5lGDBw/WgAEDtHPnTrm7u6tp06Z65513NH78eP3yyy86duyYBg0aZF//5s2batmypX799Vdt2bJFefLkUfXq1XXz5k1JD4OH9PDKT3h4uP35L7/8ohYtWqhHjx46cOCApkyZohkzZuijjz5y6M+QIUNUt25d7d27V23atInT36etX6zt27ere/fuGjZsmA4fPqwVK1aobNmyj60JAACAK+zdu1cpU6aUl5eXOnXqpMWLF6tgwYKSpG+//VZRUVFKmzatvLy81LFjRy1evFi5c+eW9PCEd6tWrdSpUycFBQU53X+OHDm0atUq9e/fX15eXvL19dWZM2f07bffOl3/3LlzWr58udq1a/fvHPD/e+pgcezYMRljlC9fPof2dOnSKWXKlEqZMqXefffdONsNGDBAJ0+e1Jw5c5zud8yYMXr33XfVuHFj5cuXT6NGjVKRIkWcjmlo06aNpk2bJkmaMWOGqlevrvTp0zvdb5MmTez9in38/vvvTtf9/fff5efnp0qVKilbtmwqWbKk2rdvL0lKkyaNkiRJIm9vb/uVD0nKnDmz+vTpoyJFiihnzpx66623VLVq1Tj/oFmzZtW4ceOUL18+NWvWTG+99ZbGjRvntB+//vqrtm7dqoULFyooKEh58uTRmDFj5Ovrq++++87pNrH69Omj0NBQFShQQD169NCOHTs0cOBAhYSEqGjRomrbtq3Wrl1rX79ixYp68803lT9/fhUoUEBffvml7ty5Y79tLbausVd+Yp8PHTpU7733nlq2bKmcOXOqcuXK+uCDDzRlyhSH/jRt2lStW7dWzpw5lS1btjj9fdr6PfpvlCJFCtWsWVP+/v4qWrSo/aqSM/fv31dERITDAwAA4FnIly+fwsLC9Ntvv6lz585q2bKlDhw4IEkaOHCgrl+/rv/+97/avn27evXqpYYNG2rv3r2SpM8++0w3b95Uv3794t3/+fPn1b59e7Vs2VLbtm3T+vXr5enpqQYN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unjxon3CDC8vL/tndHBwsP3vCR21ieu5fh/969EFcKEdO3aYcuXKGX9/f5MrVy6TN29es3PnTld367myd+9eU6VKFVOgQAFTvXp1M2DAAPuyLl26mKRJk5rp06eba9eu2durV69uBg4c6ILeus6ePXtMjhw5TKFChUySJElMjRo17APZ9+3bZ3Lnzm2KFCliwsLCzM2bN40xxnTs2NG89tpr5u7du67s+r+KusR15MgRkypVKvPmm2+ajz76yJQpU8YULVrUdOjQwdy7d89cunTJNGvWzNhsNvP++++bTz75xPTq1cukSpXKHDlyxNXd/9dQF+f27Nlj8ufPbwoVKmQ8PT1N27ZtzbJly4wxxvz4448mY8aM5rXXXjM3btywX/lr3bq1qVu3rsMZ6YSI2sT1vL+PCBZI8G7cuGFOnjxp9uzZ43BbFIw5fvy4SZMmjenatav54osvTKdOnUyuXLnMq6++aqKjo40xxvTq1cskS5bMNGvWzPTu3dt07tzZ+Pj4JKqZfS5cuGD8/f3N22+/bY4fP26WLVtmWrdubbJkyWJGjBhhjDHm1KlTpnTp0iZbtmymcOHCplq1asbb29uEhYW5uPf/Huri3NChQ03dunXtz6OioszYsWNNsWLFzJtvvmm/vXDSpEmmVKlSplixYua1114zu3btclGPnw3qEld8M/AVK1bMfPPNN8YYY9auXWvy5MljsmXLZkJDQ02dOnVMihQpzJ49e1zc+38XtXHueX8fESyAROzrr7825cuXt38QRUZGmjVr1phcuXKZUqVK2debOXOm6dixoyldurRp3Lix2b17t6u67BLbt283L7/8ssM0hqdPnzYffPCBSZMmjRk7dqy9fdq0aeaDDz4ww4cPN4cPH3ZFd58Z6uJc165dTVBQkEPbvXv3zKRJk0yJEiXMoEGD7GdXr127ZqKiosytW7dc0dVnirrEtWLFClO4cGFz48YNe9uuXbtMx44dTYECBcz8+fONMcZER0ebYcOGme7du5vevXsnihM71Ma55/19RLAAErHBgwcbf39/h7aYmBizefNmkzNnTlOnTh17e3R0tHnw4EGcwdyJQVhYmEmWLJlZuXKlQ/v58+fNwIEDzcsvvxxnWWJAXRzFXuX76quvTIkSJczu3bsdbsW4deuW6dmzpylWrJj96mnsNgkZdYnfzz//bHx9fc32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", "text/plain": [ "
" ] From d8f74fac0834fd5ade06f1ef8b2365100a21db60 Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Sun, 1 Dec 2024 16:19:23 -0500 Subject: [PATCH 6/9] Test `generate_composition_with_smact` with smact14 and icsd24 ox states --- smact/tests/test_utils.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/smact/tests/test_utils.py b/smact/tests/test_utils.py index 7d3dea22..056c9356 100644 --- a/smact/tests/test_utils.py +++ b/smact/tests/test_utils.py @@ -96,20 +96,30 @@ def test_convert_formula(self): def test_generate_composition_with_smact(self): save_dir = "data/binary/df_binary_label.pkl" - smact_df = generate_composition_with_smact.generate_composition_with_smact( - num_elements=2, - max_stoich=1, - max_atomic_num=10, - save_path=save_dir, - ) - self.assertIsInstance(smact_df, pd.DataFrame) - self.assertTrue(len(smact_df) > 0) - - # Check if the data was saved to disk - self.assertTrue(os.path.exists(save_dir)) - - # Clean up - shutil.rmtree("data") + oxidation_states_sets = ["smact14", "icsd24"] + oxidation_states_sets_dict = { + "smact14": {"smact_allowed": 388}, + "icsd24": {"smact_allowed": 342}, + } + for ox_states in oxidation_states_sets: + with self.subTest(ox_states=ox_states): + smact_df = generate_composition_with_smact.generate_composition_with_smact( + num_elements=2, + max_stoich=3, + max_atomic_num=20, + save_path=save_dir, + oxidation_states_set=ox_states, + ) + self.assertIsInstance(smact_df, pd.DataFrame) + self.assertTrue(len(smact_df) == 1330) + self.assertTrue( + smact_df["smact_allowed"].sum() == oxidation_states_sets_dict[ox_states]["smact_allowed"] + ) + # Check if the data was saved to disk + self.assertTrue(os.path.exists(save_dir)) + + # Clean up + shutil.rmtree("data") @pytest.mark.skipif( sys.platform == "win32" or not (os.environ.get("MP_API_KEY") or SETTINGS.get("PMG_MAPI_KEY")), From ce1dd9907173f5cbc498b3538a9aef40441cc486 Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Mon, 2 Dec 2024 12:22:27 -0500 Subject: [PATCH 7/9] Remove unused argument --- smact/screening.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/smact/screening.py b/smact/screening.py index 05a5511d..a95d2d16 100644 --- a/smact/screening.py +++ b/smact/screening.py @@ -336,7 +336,6 @@ def smact_filter( stoichs: list[list[int]] | None = None, species_unique: bool = True, oxidation_states_set: str = "icsd24", - comp_tuple: bool = False, ) -> list[tuple[str, int, int]] | list[tuple[str, int]]: """Function that applies the charge neutrality and electronegativity tests in one go for simple application in external scripts that @@ -348,12 +347,11 @@ def smact_filter( Args: ---- - els (tuple/list): A list of smact.Element objects - threshold (int): Threshold for stoichiometry limit, default = 8 + els (tuple/list): A list of smact.Element objects. + threshold (int): Threshold for stoichiometry limit, default = 8. stoichs (list[int]): A selection of valid stoichiometric ratios for each site. species_unique (bool): Whether or not to consider elements in different oxidation states as unique in the results. oxidation_states_set (string): A string to choose which set of oxidation states should be chosen. Options are 'smact14', 'icsd16',"icsd24", 'pymatgen_sp' and 'wiki' for the 2014 SMACT default, 2016 ICSD, 2024 ICSD, pymatgen structure predictor and Wikipedia (https://en.wikipedia.org/wiki/Template:List_of_oxidation_states_of_the_elements) oxidation states respectively. A filepath to an oxidation states text file can also be supplied as well. - comp_tuple (bool): Whether or not to return the results as a named tuple of elements and stoichiometries (True) or as a normal tuple of elements and stoichiometries (False). Returns: ------- @@ -438,7 +436,7 @@ def smact_validity( composition: pymatgen.core.Composition | str, use_pauling_test: bool = True, include_alloys: bool = True, - oxidation_states_set: str | bytes | os.PathLike = "icsd24", + oxidation_states_set: str = "icsd24", ) -> bool: """ Check if a composition is valid according to the SMACT rules. @@ -454,7 +452,7 @@ def smact_validity( composition (Union[pymatgen.core.Composition, str]): Composition/formula to check. This can be a pymatgen Composition object or a string. use_pauling_test (bool): Whether to use the Pauling electronegativity test include_alloys (bool): If True, compositions which only contain metal elements will be considered valid without further checks. - oxidation_states_set (Union[str, bytes, os.PathLike]): A string to choose which set of + oxidation_states_set (str): A string to choose which set of oxidation states should be chosen for charge-balancing. Options are 'smact14', 'icsd14', 'icsd24', 'pymatgen_sp' and 'wiki' for the 2014 SMACT default, 2016 ICSD, 2024 ICSD, pymatgen structure predictor and Wikipedia (https://en.wikipedia.org/wiki/Template:List_of_oxidation_states_of_the_elements) oxidation states respectively. From 7d7459d71f4ea98e2ecbcc4ba8650af3c3451d8a Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Mon, 2 Dec 2024 12:22:45 -0500 Subject: [PATCH 8/9] Use ICSD24 as the default oxidation states --- smact/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smact/__init__.py b/smact/__init__.py index 43713eb6..097b42a1 100644 --- a/smact/__init__.py +++ b/smact/__init__.py @@ -58,7 +58,7 @@ class Element: Element.SSEPauling (float) : SSE based on regression fit with Pauling electronegativity - Element.oxidation_states (list) : Default list of allowed oxidation states for use in SMACT + Element.oxidation_states (list) : Default list of allowed oxidation states for use in SMACT. In >3.0, these are the ICSD24 set. In <3.0, these are the SMACT14 set. Element.oxidation_states_smact14 (list): Original list of oxidation states that were manually compiled for SMACT in 2014 (default in SMACT < 3.0) @@ -179,7 +179,7 @@ def __init__(self, symbol: str, oxi_states_custom_filepath: str | None = None): ("number", dataset["Z"]), ( "oxidation_states", - data_loader.lookup_element_oxidation_states(symbol), + data_loader.lookup_element_oxidation_states_icsd24(symbol), ), ( "oxidation_states_smact14", From 59bf75c7865ab910efa4eabe1bb54af4ef516136 Mon Sep 17 00:00:00 2001 From: Anthony Onwuli Date: Mon, 2 Dec 2024 12:26:19 -0500 Subject: [PATCH 9/9] Update test_core.py to reflect change to default oxidation states --- smact/tests/test_core.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/smact/tests/test_core.py b/smact/tests/test_core.py index 74cad9da..176ba6c5 100755 --- a/smact/tests/test_core.py +++ b/smact/tests/test_core.py @@ -47,7 +47,8 @@ def test_element_dictionary(self): newlist = ["O", "Rb", "W"] dictionary = smact.element_dictionary(newlist, TEST_OX_STATES) self.assertEqual(dictionary["O"].crustal_abundance, 461000.0) - self.assertEqual(dictionary["Rb"].oxidation_states, [-1, 1]) + self.assertEqual(dictionary["Rb"].oxidation_states_smact14, [-1, 1]) + self.assertEqual(dictionary["Rb"].oxidation_states, [1]) self.assertEqual(dictionary["Rb"].oxidation_states_custom, [-1, 1]) self.assertEqual(dictionary["W"].name, "Tungsten") self.assertTrue("Rn" in smact.element_dictionary())