def test_condense_structure_default(self):
        """Test structure condensing."""
        sc = StructureCondenser()
        data = sc.condense_structure(self.tin_dioxide)

        self.assertEqual(data['mineral']['type'], 'Rutile')
        self.assertEqual(data['mineral']['simplified'], False)
        self.assertEqual(data['mineral']['n_species_type_match'], True)
        self.assertEqual(data['mineral']['distance'], -1)

        self.assertEqual(data['spg_symbol'], 'P4_2/mnm')
        self.assertEqual(data['crystal_system'], 'tetragonal')
        self.assertEqual(data['dimensionality'], 3)

        # check the right number of sites and that the site data is correct
        # for one site
        self.assertEqual(len(data['sites'].keys()), 2)
        self.assertEqual(data['sites'][0]['element'], 'Sn4+')
        self.assertEqual(data['sites'][0]['geometry']['type'], 'octahedral')
        self.assertAlmostEqual(data['sites'][0]['geometry']['likeness'],
                               0.9349817375244279)
        self.assertEqual(len(data['sites'][0]['nn']), 6)
        self.assertEqual(len(data['sites'][0]['nnn']['corner']), 8)
        self.assertEqual(len(data['sites'][0]['nnn']['edge']), 2)
        self.assertEqual(data['sites'][0]['poly_formula'], 'O6')
        self.assertEqual(data['sites'][0]['sym_labels'], (1, ))

        # check distances
        self.assertEqual(len(data['distances'][0][2]), 6)
        self.assertEqual(len(data['distances'][2][0]), 3)
        self.assertAlmostEqual(data['distances'][0][2][0], 2.092210570377848)

        # check angles
        self.assertEqual(len(data['angles'][0][0]['corner']), 8)
        self.assertEqual(len(data['angles'][0][0]['edge']), 4)
        self.assertAlmostEqual(data['angles'][0][0]['edge'][0],
                               101.62284671698572)

        # check nnn distances
        self.assertEqual(len(data['nnn_distances'][0][0]['corner']), 8)
        self.assertEqual(len(data['nnn_distances'][0][0]['edge']), 2)
        self.assertAlmostEqual(data['nnn_distances'][0][0]['edge'][0],
                               3.24322132)

        # check components
        self.assertEqual(data['components'][0]['dimensionality'], 3)
        self.assertEqual(data['components'][0]['orientation'], None)
        self.assertEqual(data['components'][0]['formula'], 'SnO2')
        self.assertEqual(data['components'][0]['molecule_name'], None)
        self.assertEqual(data['components'][0]['sites'], [0, 0, 2, 2, 2, 2])
        self.assertEqual(data['component_makeup'], [0])

        # check vdw heterostructure information doesn't exist
        self.assertEqual(data['vdw_heterostructure_info'], None)
    def test_condense_structure_default(self):
        """Test structure condensing."""
        sc = StructureCondenser()
        data = sc.condense_structure(self.tin_dioxide)

        self.assertEqual(data["mineral"]["type"], "Rutile")
        self.assertEqual(data["mineral"]["simplified"], False)
        self.assertEqual(data["mineral"]["n_species_type_match"], True)
        self.assertEqual(data["mineral"]["distance"], -1)

        self.assertEqual(data["spg_symbol"], "P4_2/mnm")
        self.assertEqual(data["crystal_system"], "tetragonal")
        self.assertEqual(data["dimensionality"], 3)

        # check the right number of sites and that the site data is correct
        # for one site
        self.assertEqual(len(data["sites"].keys()), 2)
        self.assertEqual(data["sites"][0]["element"], "Sn4+")
        self.assertEqual(data["sites"][0]["geometry"]["type"], "octahedral")
        self.assertAlmostEqual(data["sites"][0]["geometry"]["likeness"],
                               0.9349817375244279)
        self.assertEqual(len(data["sites"][0]["nn"]), 6)
        self.assertEqual(len(data["sites"][0]["nnn"]["corner"]), 8)
        self.assertEqual(len(data["sites"][0]["nnn"]["edge"]), 2)
        self.assertEqual(data["sites"][0]["poly_formula"], "O6")
        self.assertEqual(data["sites"][0]["sym_labels"], (1, ))

        # check distances
        self.assertEqual(len(data["distances"][0][2]), 6)
        self.assertEqual(len(data["distances"][2][0]), 3)
        self.assertAlmostEqual(data["distances"][0][2][0], 2.092210570377848)

        # check angles
        self.assertEqual(len(data["angles"][0][0]["corner"]), 8)
        self.assertEqual(len(data["angles"][0][0]["edge"]), 4)
        self.assertAlmostEqual(data["angles"][0][0]["edge"][0],
                               101.62284671698572)

        # check nnn distances
        self.assertEqual(len(data["nnn_distances"][0][0]["corner"]), 8)
        self.assertEqual(len(data["nnn_distances"][0][0]["edge"]), 2)
        self.assertAlmostEqual(data["nnn_distances"][0][0]["edge"][0],
                               3.24322132)

        # check components
        self.assertEqual(data["components"][0]["dimensionality"], 3)
        self.assertEqual(data["components"][0]["orientation"], None)
        self.assertEqual(data["components"][0]["formula"], "SnO2")
        self.assertEqual(data["components"][0]["molecule_name"], None)
        self.assertEqual(data["components"][0]["sites"], [0, 0, 2, 2, 2, 2])
        self.assertEqual(data["component_makeup"], [0])

        # check vdw heterostructure information doesn't exist
        self.assertEqual(data["vdw_heterostructure_info"], None)
    def test_condense_structure_sym(self):
        """Test nothing changes when we use symmetry to reduce components."""
        sc = StructureCondenser(use_symmetry_equivalent_sites=True)
        data = sc.condense_structure(self.tin_dioxide)

        # check the right number of sites and that the site data is correct
        # for one site
        self.assertEqual(len(data['sites'].keys()), 2)
        self.assertEqual(data['sites'][0]['element'], 'Sn4+')
        self.assertEqual(data['sites'][0]['geometry']['type'], 'octahedral')
        self.assertAlmostEqual(data['sites'][0]['geometry']['likeness'],
                               0.9349817375244279)
        self.assertEqual(len(data['sites'][0]['nn']), 6)
        self.assertEqual(len(data['sites'][0]['nnn']['corner']), 8)
        self.assertEqual(len(data['sites'][0]['nnn']['edge']), 2)
        self.assertEqual(data['sites'][0]['poly_formula'], 'O6')
        self.assertEqual(data['sites'][0]['sym_labels'], (1, ))

        # check distances
        self.assertEqual(len(data['distances'][0][2]), 6)
        self.assertEqual(len(data['distances'][2][0]), 3)
        self.assertAlmostEqual(data['distances'][0][2][0], 2.092210570377848)

        # check angles
        self.assertEqual(len(data['angles'][0][0]['corner']), 8)
        self.assertEqual(len(data['angles'][0][0]['edge']), 4)
        self.assertAlmostEqual(data['angles'][0][0]['edge'][0],
                               101.62284671698572)

        # check nnn distances
        self.assertEqual(len(data['nnn_distances'][0][0]['corner']), 8)
        self.assertEqual(len(data['nnn_distances'][0][0]['edge']), 2)
        self.assertAlmostEqual(data['nnn_distances'][0][0]['edge'][0],
                               3.24322132)

        # check components
        self.assertEqual(data['components'][0]['dimensionality'], 3)
        self.assertEqual(data['components'][0]['orientation'], None)
        self.assertEqual(data['components'][0]['formula'], 'SnO2')
        self.assertEqual(data['components'][0]['molecule_name'], None)
        self.assertEqual(data['components'][0]['sites'], [0, 0, 2, 2, 2, 2])
        self.assertEqual(data['component_makeup'], [0])
    def test_condense_structure_sym(self):
        """Test nothing changes when we use symmetry to reduce components."""
        sc = StructureCondenser(use_symmetry_equivalent_sites=True)
        data = sc.condense_structure(self.tin_dioxide)

        # check the right number of sites and that the site data is correct
        # for one site
        self.assertEqual(len(data["sites"].keys()), 2)
        self.assertEqual(data["sites"][0]["element"], "Sn4+")
        self.assertEqual(data["sites"][0]["geometry"]["type"], "octahedral")
        self.assertAlmostEqual(data["sites"][0]["geometry"]["likeness"],
                               0.9349817375244279)
        self.assertEqual(len(data["sites"][0]["nn"]), 6)
        self.assertEqual(len(data["sites"][0]["nnn"]["corner"]), 8)
        self.assertEqual(len(data["sites"][0]["nnn"]["edge"]), 2)
        self.assertEqual(data["sites"][0]["poly_formula"], "O6")
        self.assertEqual(data["sites"][0]["sym_labels"], (1, ))

        # check distances
        self.assertEqual(len(data["distances"][0][2]), 6)
        self.assertEqual(len(data["distances"][2][0]), 3)
        self.assertAlmostEqual(data["distances"][0][2][0], 2.092210570377848)

        # check angles
        self.assertEqual(len(data["angles"][0][0]["corner"]), 8)
        self.assertEqual(len(data["angles"][0][0]["edge"]), 4)
        self.assertAlmostEqual(data["angles"][0][0]["edge"][0],
                               101.62284671698572)

        # check nnn distances
        self.assertEqual(len(data["nnn_distances"][0][0]["corner"]), 8)
        self.assertEqual(len(data["nnn_distances"][0][0]["edge"]), 2)
        self.assertAlmostEqual(data["nnn_distances"][0][0]["edge"][0],
                               3.24322132)

        # check components
        self.assertEqual(data["components"][0]["dimensionality"], 3)
        self.assertEqual(data["components"][0]["orientation"], None)
        self.assertEqual(data["components"][0]["formula"], "SnO2")
        self.assertEqual(data["components"][0]["molecule_name"], None)
        self.assertEqual(data["components"][0]["sites"], [0, 0, 2, 2, 2, 2])
        self.assertEqual(data["component_makeup"], [0])