示例#1
0
    def test_get_sum_icohps_between_neighbors_of_atom(self):
        # will only look at icohps between cations or anions
        self.chemenvlobster1.get_info_icohps_to_neighbors(isites=[1])
        self.assertEqual(
            self.chemenvlobster1.get_info_icohps_between_neighbors(
                isites=[1])[2], 1)
        self.assertAlmostEqual(
            self.chemenvlobster1.get_info_icohps_between_neighbors(
                isites=[1])[0], -0.05507)
        self.assertEqual(
            self.chemenvlobster1.get_info_icohps_between_neighbors(
                isites=[0])[2], 15)
        # use an example where this is easier to test (e.g., linear environment?)

        chemenv_here = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp-7000.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp-7000.gz")),
            additional_condition=1,
        )
        self.assertEqual(
            len(chemenv_here.get_info_icohps_between_neighbors(isites=[0])[4]),
            6)
示例#2
0
 def test_cation_anion_mode_without_ions(self):
     with self.assertRaises(ValueError) as err:
         test = LobsterNeighbors(
             are_coops=False,
             filename_ICOHP=os.path.join(test_dir_env,
                                         "../ICOHPLIST.lobster"),
             structure=Structure.from_file(
                 os.path.join(test_dir_env, "../POSCAR")),
             valences_from_charges=False,
             additional_condition=1,
         )
     self.assertEqual(
         str(err.exception),
         "Valences cannot be assigned, additional_conditions 1 and 3 and 5 and 6 will not work"
     )
     with self.assertRaises(ValueError) as err:
         test = LobsterNeighbors(
             are_coops=False,
             filename_ICOHP=os.path.join(test_dir_env,
                                         "../ICOHPLIST.lobster"),
             structure=Structure.from_file(
                 os.path.join(test_dir_env, "../POSCAR")),
             valences_from_charges=False,
             additional_condition=1,
             valences=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
         )
     self.assertEqual(
         str(err.exception),
         "All valences are equal to 0, additional_conditions 1 and 3 and 5 and 6 will not work"
     )
示例#3
0
 def test_set_limits(self):
     test = LobsterNeighbors(
         are_coops=False,
         filename_ICOHP=os.path.join(test_dir_env, "ICOHPLIST.lobster.mp_353"),
         structure=Structure.from_file(os.path.join(test_dir_env, "POSCAR.mp_353")),
         valences_from_charges=True,
         filename_CHARGE=os.path.join(test_dir_env, "CHARGE.lobster.mp-353.gz"),
         additional_condition=1,
         limits=[-100000, 0],
     )
示例#4
0
 def test_wrong_additional_correction(self):
     with self.assertRaises(ValueError):
         test = LobsterNeighbors(
             are_coops=False,
             filename_ICOHP=os.path.join(test_dir_env, "ICOHPLIST.lobster.mp_353"),
             structure=Structure.from_file(os.path.join(test_dir_env, "POSCAR.mp_353")),
             valences_from_charges=True,
             filename_CHARGE=os.path.join(test_dir_env, "CHARGE.lobster.mp-353.gz"),
             additional_condition=10,
         )
示例#5
0
    def test_get_info_cohps_to_neighbors(self):
        chemenvlobster1 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190_2.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=1,
        )
        self.assertEqual(
            chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=["O"])[0],
            "6 x O-Re (per bond)",
        )
        self.assertEqual(
            type(
                chemenvlobster1.get_info_cohps_to_neighbors(
                    path_to_COHPCAR=os.path.join(test_dir_env,
                                                 "COHPCAR.lobster.mp-190.gz"),
                    isites=[0],
                    only_bonds_to=["O"],
                )[1]),
            Cohp,
        )

        cophthing = chemenvlobster1.get_info_cohps_to_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=None,
            per_bond=False,
        )[1]
        self.assertAlmostEqual(
            np.sum([cophthing.icohp[Spin.up], cophthing.icohp[Spin.down]],
                   axis=0)[300],
            chemenvlobster1.get_info_icohps_to_neighbors(isites=[0])[0],
        )

        # summed_spin_channel
        cophthing = chemenvlobster1.get_info_cohps_to_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=None,
            per_bond=False,
            summed_spin_channels=True,
        )[1]
        self.assertAlmostEqual(
            cophthing.icohp[Spin.up][300],
            chemenvlobster1.get_info_icohps_to_neighbors(isites=[0])[0])

        self.assertEqual(
            chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=["Te"],
            )[0],
            None,
        )

        self.assertEqual(
            chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=["Te"],
            )[1],
            None,
        )

        self.assertEqual(
            self.chemenvlobster0_NaSi.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.NaSi.gz"),
                isites=[8],
                onlycation_isites=False,
                only_bonds_to=["Na"],
            )[0],
            "1 x Na-Si (per bond)",
        )
        self.assertEqual(
            self.chemenvlobster0_NaSi.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.NaSi.gz"),
                isites=[8],
                onlycation_isites=False,
                only_bonds_to=["Si"],
            )[0],
            "3 x Si-Si (per bond)",
        )

        chemenvlobster1.plot_cohps_of_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=["O"],
            summed_spin_channels=True,
        )

        chemenvlobster1.plot_cohps_of_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=["O"],
            summed_spin_channels=True,
            xlim=[-10, 10],
            ylim=None,
        )

        with self.assertRaises(ValueError):
            # icohplist and cohpcar do not fit together
            self.chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=None,
                per_bond=False,
            )

        with self.assertRaises(ValueError):
            # icohplist and cohpcar do not fit together
            self.chemenvlobster2.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=None,
                per_bond=False,
            )
示例#6
0
    def setUp(self):
        # test additional conditions first
        # only consider cation anion bonds

        self.chemenvlobster1 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=1,
        )

        # all bonds
        self.chemenvlobster0 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=0,
        )

        # only cation cation, anion anion bonds
        self.chemenvlobster5 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=5,
        )

        # only cation cation bonds
        self.chemenvlobster6 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=6,
        )

        # 2,3,4 are not tested so far
        self.chemenvlobster2 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=2,
        )

        self.chemenvlobster3 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=3,
        )

        self.chemenvlobster4 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=4,
        )

        # search for other testcase where 2,3,4 arrive at different results
        self.chemenvlobster0_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=0,
        )
        self.chemenvlobster1_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=1,
        )

        self.chemenvlobster2_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=2,
        )

        self.chemenvlobster5_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=5,
        )

        self.chemenvlobster5_second_percentage = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=5,
            perc_strength_ICOHP=1.0,
        )

        self.chemenvlobster6_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=6,
        )

        # TODO: use charge instead of valence
        self.chemenvlobster1_charges = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
        )
        self.chemenvlobster1_charges_loewdin = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
            which_charge="Loewdin",
        )
        self.chemenvlobster6_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=6,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster5_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=5,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster4_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=4,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster3_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=3,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster2_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=2,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster1_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
            adapt_extremum_to_add_cond=True,
        )

        self.chemenvlobster0_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=0,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster0_NaSi = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.NaSi.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.NaSi.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.NaSi.gz"),
            additional_condition=0,
            adapt_extremum_to_add_cond=True,
        )
示例#7
0
class TestLobsterNeighbors(unittest.TestCase):
    def setUp(self):
        # test additional conditions first
        # only consider cation anion bonds

        self.chemenvlobster1 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=1,
        )

        # all bonds
        self.chemenvlobster0 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=0,
        )

        # only cation cation, anion anion bonds
        self.chemenvlobster5 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=5,
        )

        # only cation cation bonds
        self.chemenvlobster6 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=6,
        )

        # 2,3,4 are not tested so far
        self.chemenvlobster2 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=2,
        )

        self.chemenvlobster3 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=3,
        )

        self.chemenvlobster4 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=4,
        )

        # search for other testcase where 2,3,4 arrive at different results
        self.chemenvlobster0_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=0,
        )
        self.chemenvlobster1_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=1,
        )

        self.chemenvlobster2_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=2,
        )

        self.chemenvlobster5_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=5,
        )

        self.chemenvlobster5_second_percentage = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=5,
            perc_strength_ICOHP=1.0,
        )

        self.chemenvlobster6_second = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            additional_condition=6,
        )

        # TODO: use charge instead of valence
        self.chemenvlobster1_charges = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
        )
        self.chemenvlobster1_charges_loewdin = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
            which_charge="Loewdin",
        )
        self.chemenvlobster6_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=6,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster5_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=5,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster4_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=4,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster3_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=3,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster2_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=2,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster1_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
            adapt_extremum_to_add_cond=True,
        )

        self.chemenvlobster0_charges_additional_condition = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=0,
            adapt_extremum_to_add_cond=True,
        )
        self.chemenvlobster0_NaSi = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.NaSi.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.NaSi.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.NaSi.gz"),
            additional_condition=0,
            adapt_extremum_to_add_cond=True,
        )

    def test_use_of_coop(self):
        with self.assertRaises(ValueError):
            test = LobsterNeighbors(
                are_coops=True,
                filename_ICOHP=os.path.join(test_dir_env,
                                            "ICOHPLIST.lobster.mp_353.gz"),
                structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                valences_from_charges=True,
                filename_CHARGE=os.path.join(test_dir_env,
                                             "CHARGE.lobster.mp-353.gz"),
                additional_condition=1,
            )

    def test_wrong_additional_correction(self):
        with self.assertRaises(ValueError):
            test = LobsterNeighbors(
                are_coops=False,
                filename_ICOHP=os.path.join(test_dir_env,
                                            "ICOHPLIST.lobster.mp_353.gz"),
                structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                valences_from_charges=True,
                filename_CHARGE=os.path.join(test_dir_env,
                                             "CHARGE.lobster.mp-353.gz"),
                additional_condition=10,
            )

    def test_set_limits(self):
        test = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_353.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
            valences_from_charges=True,
            filename_CHARGE=os.path.join(test_dir_env,
                                         "CHARGE.lobster.mp-353.gz"),
            additional_condition=1,
            limits=[-100000, 0],
        )
        self.assertListEqual(test.limits, [-100000, 0])

    def test_molecules_allowed(self):
        self.chemenvlobster1.molecules_allowed

    def test_get_nn_info(self):
        # NO_ADDITIONAL_CONDITION = 0
        # ONLY_ANION_CATION_BONDS = 1
        # NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 2
        # ONLY_ANION_CATION_BONDS_AND_NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 3
        # ONLY_ELEMENT_TO_OXYGEN_BONDS = 4
        # DO_NOT_CONSIDER_ANION_CATION_BONDS=5
        # ONLY_CATION_CATION_BONDS=6

        # All bonds
        # ReO3
        self.assertEqual(
            len(
                self.chemenvlobster0.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster0.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            2,
        )
        # ONLY_ANION_CATION_BONDS = 1
        self.assertEqual(
            len(
                self.chemenvlobster1.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster1.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            2,
        )
        # NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 2
        self.assertEqual(
            len(
                self.chemenvlobster2.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster2.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            2,
        )
        # ONLY_ANION_CATION_BONDS_AND_NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 3
        self.assertEqual(
            len(
                self.chemenvlobster3.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster3.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            2,
        )
        # ONLY_ELEMENT_TO_OXYGEN_BONDS = 4
        self.assertEqual(
            len(
                self.chemenvlobster4.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster4.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            2,
        )
        # DO_NOT_CONSIDER_ANION_CATION_BONDS=5
        self.assertEqual(
            len(
                self.chemenvlobster5.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            0,
        )
        self.assertEqual(
            len(
                self.chemenvlobster5.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            0,
        )
        # ONLY_CATION_CATION_BONDS=6
        self.assertEqual(
            len(
                self.chemenvlobster6.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=0)),
            0,
        )

        self.assertEqual(
            len(
                self.chemenvlobster6.get_nn(structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
                                            n=1)),
            0,
        )

        # All bonds
        # mp-353, Ag2O
        # all bonds
        self.assertEqual(
            len(
                self.chemenvlobster0_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=0)),
            8,
        )

        # ONLY_ANION_CATION_BONDS = 1
        self.assertEqual(
            len(
                self.chemenvlobster1_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=0)),
            2,
        )

        # NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 2
        self.assertEqual(
            len(
                self.chemenvlobster2_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=0)),
            2,
        )
        self.assertEqual(
            len(
                self.chemenvlobster2_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=4)),
            4,
        )

        # DO_NOT_CONSIDER_ANION_CATION_BONDS=5
        self.assertEqual(
            len(
                self.chemenvlobster5_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster5_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=4)),
            0,
        )
        # ONLY_CATION_CATION_BONDS=6
        self.assertEqual(
            len(
                self.chemenvlobster6_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=0)),
            6,
        )
        self.assertEqual(
            len(
                self.chemenvlobster6_second.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=4)),
            0,
        )

        self.assertEqual(
            len(
                self.chemenvlobster5_second_percentage.get_nn(
                    structure=Structure.from_file(
                        os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                    n=0)),
            0,
        )

    def test_structure_graph(self):
        sg = self.chemenvlobster1_second.get_bonded_structure(
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_353.gz")))
        self.assertEqual(type(sg), StructureGraph)

    def test_order_parameter(self):
        self.assertAlmostEqual(
            self.chemenvlobster1_second.get_local_order_parameters(
                structure=Structure.from_file(
                    os.path.join(test_dir_env, "POSCAR.mp_353.gz")),
                n=0)["linear"],
            1.0,
        )

    def test_get_structure_environments(self):
        lse = self.chemenvlobster1_second.get_light_structure_environment()
        self.assertEqual(lse.coordination_environments[0][0]["ce_symbol"],
                         "L:2")
        self.assertEqual(lse.coordination_environments[5][0]["ce_symbol"],
                         "T:4")

        lse2 = self.chemenvlobster1.get_light_structure_environment()
        self.assertEqual(lse2.coordination_environments[0][0]["ce_symbol"],
                         "O:6")

    def test_get_strucuture_environments_further_tests(self):
        lse = self.chemenvlobster1_second.get_light_structure_environment()
        lse.as_dict()
        lse.get_statistics()
        self.assertTrue(lse.uniquely_determines_coordination_environments)

    def test_get_info_icohps_neighbors(self):
        results = self.chemenvlobster1.get_info_icohps_to_neighbors(isites=[0])
        self.assertAlmostEqual(results[0], -33.26058)
        for bond in results[1]:
            self.assertAlmostEqual(bond, -5.54345, 3)
        self.assertAlmostEqual(results[2], 6)
        self.assertAlmostEqual(results[3],
                               ["27", "30", "48", "49", "64", "73"])

        results2 = self.chemenvlobster1.get_info_icohps_to_neighbors(
            isites=None)
        self.assertAlmostEqual(results2[0], -33.26058)
        for bond in results2[1]:
            self.assertAlmostEqual(bond, -5.54345, 3)
        self.assertAlmostEqual(results2[2], 6)
        self.assertAlmostEqual(results2[3],
                               ["27", "30", "48", "49", "64", "73"])
        self.assertAlmostEqual(results2[4],
                               [["Re1", "O2"], ["Re1", "O2"], ["Re1", "O3"],
                                ["Re1", "O3"], ["Re1", "O4"], ["Re1", "O4"]])

    def test_get_sum_icohps_between_neighbors_of_atom(self):
        # will only look at icohps between cations or anions
        self.chemenvlobster1.get_info_icohps_to_neighbors(isites=[1])
        self.assertEqual(
            self.chemenvlobster1.get_info_icohps_between_neighbors(
                isites=[1])[2], 1)
        self.assertAlmostEqual(
            self.chemenvlobster1.get_info_icohps_between_neighbors(
                isites=[1])[0], -0.05507)
        self.assertEqual(
            self.chemenvlobster1.get_info_icohps_between_neighbors(
                isites=[0])[2], 15)
        # use an example where this is easier to test (e.g., linear environment?)

        chemenv_here = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp-7000.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp-7000.gz")),
            additional_condition=1,
        )
        self.assertEqual(
            len(chemenv_here.get_info_icohps_between_neighbors(isites=[0])[4]),
            6)

    def test_get_plot_label(self):
        self.assertEqual(
            self.chemenvlobster1._get_plot_label(
                atoms=[["Re1", "O2"], ["Re1", "O2"], ["Re1", "O3"],
                       ["Re1", "O3"], ["Re1", "O4"], ["Re1", "O4"]],
                per_bond=False,
            ),
            "6 x O-Re",
        )
        self.assertEqual(
            self.chemenvlobster1._get_plot_label(
                atoms=[["Re1", "O2"], ["Re1", "O2"], ["Re1", "O3"],
                       ["Re1", "O3"], ["Re1", "O4"], ["Si1", "O4"]],
                per_bond=False,
            ),
            "5 x O-Re, 1 x O-Si",
        )

        self.assertEqual(
            self.chemenvlobster1._get_plot_label(
                atoms=[["Si1", "O2"], ["Si1", "O2"], ["Si1", "O3"],
                       ["Re1", "O3"], ["Re1", "O4"], ["Si1", "O4"]],
                per_bond=False,
            ),
            "4 x O-Si, 2 x O-Re",
        )

        self.assertEqual(
            self.chemenvlobster1._get_plot_label(
                atoms=[["Re1", "O2"], ["Re1", "O2"], ["Re1", "O3"],
                       ["Re1", "O3"], ["Re1", "O4"], ["Re1", "O4"]],
                per_bond=True,
            ),
            "6 x O-Re (per bond)",
        )

    def test_get_info_cohps_to_neighbors(self):
        chemenvlobster1 = LobsterNeighbors(
            are_coops=False,
            filename_ICOHP=os.path.join(test_dir_env,
                                        "ICOHPLIST.lobster.mp_190_2.gz"),
            structure=Structure.from_file(
                os.path.join(test_dir_env, "POSCAR.mp_190.gz")),
            additional_condition=1,
        )
        self.assertEqual(
            chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=["O"])[0],
            "6 x O-Re (per bond)",
        )
        self.assertEqual(
            type(
                chemenvlobster1.get_info_cohps_to_neighbors(
                    path_to_COHPCAR=os.path.join(test_dir_env,
                                                 "COHPCAR.lobster.mp-190.gz"),
                    isites=[0],
                    only_bonds_to=["O"],
                )[1]),
            Cohp,
        )

        cophthing = chemenvlobster1.get_info_cohps_to_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=None,
            per_bond=False,
        )[1]
        self.assertAlmostEqual(
            np.sum([cophthing.icohp[Spin.up], cophthing.icohp[Spin.down]],
                   axis=0)[300],
            chemenvlobster1.get_info_icohps_to_neighbors(isites=[0])[0],
        )

        # summed_spin_channel
        cophthing = chemenvlobster1.get_info_cohps_to_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=None,
            per_bond=False,
            summed_spin_channels=True,
        )[1]
        self.assertAlmostEqual(
            cophthing.icohp[Spin.up][300],
            chemenvlobster1.get_info_icohps_to_neighbors(isites=[0])[0])

        self.assertEqual(
            chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=["Te"],
            )[0],
            None,
        )

        self.assertEqual(
            chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=["Te"],
            )[1],
            None,
        )

        self.assertEqual(
            self.chemenvlobster0_NaSi.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.NaSi.gz"),
                isites=[8],
                onlycation_isites=False,
                only_bonds_to=["Na"],
            )[0],
            "1 x Na-Si (per bond)",
        )
        self.assertEqual(
            self.chemenvlobster0_NaSi.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.NaSi.gz"),
                isites=[8],
                onlycation_isites=False,
                only_bonds_to=["Si"],
            )[0],
            "3 x Si-Si (per bond)",
        )

        chemenvlobster1.plot_cohps_of_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=["O"],
            summed_spin_channels=True,
        )

        chemenvlobster1.plot_cohps_of_neighbors(
            path_to_COHPCAR=os.path.join(test_dir_env,
                                         "COHPCAR.lobster.mp-190.gz"),
            isites=[0],
            only_bonds_to=["O"],
            summed_spin_channels=True,
            xlim=[-10, 10],
            ylim=None,
        )

        with self.assertRaises(ValueError):
            # icohplist and cohpcar do not fit together
            self.chemenvlobster1.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=None,
                per_bond=False,
            )

        with self.assertRaises(ValueError):
            # icohplist and cohpcar do not fit together
            self.chemenvlobster2.get_info_cohps_to_neighbors(
                path_to_COHPCAR=os.path.join(test_dir_env,
                                             "COHPCAR.lobster.mp-190.gz"),
                isites=[0],
                only_bonds_to=None,
                per_bond=False,
            )