def test_pw_document_init(self): document = PwDocument() self.assertIsInstance(PwDocument(), PwDocument) self.assertTrue( document.schema.url.endswith("qeschema/schemas/qes.xsd")) source = os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml') document = PwDocument(source) if platform.system() == 'Linux': self.assertEqual(document.filename, source) else: self.assertTrue(document.filename.endswith('Al001_relax_bfgs.xml')) self.assertTrue( document.schema.url.endswith( "qeschema/schemas/releases/qes_190719.xsd")) document = PwDocument(source, schema='qes.xsd') if platform.system() == 'Linux': self.assertEqual(document.filename, source) else: self.assertTrue(document.filename.endswith('Al001_relax_bfgs.xml')) self.assertTrue( document.schema.url.endswith("qeschema/schemas/qes.xsd")) source = os.path.join(self.test_dir, 'resources/pw/Al001_rlx_damp.xml') document = PwDocument(source) if platform.system() == 'Linux': self.assertEqual(document.filename, source) else: self.assertTrue(document.filename.endswith('Al001_rlx_damp.xml')) self.assertTrue( document.schema.url.endswith("qeschema/schemas/qes.xsd"))
def test_document_init(self): schema = os.path.join(self.schemas_dir, 'qes.xsd') document = XmlDocument(schema) self.assertIsInstance(document, XmlDocument) self.assertIsNone(document.root) self.assertIsNone(document.filename) self.assertIsNone(document.format) self.assertTrue(document.schema.url.endswith(schema)) self.assertIsInstance(document.schema, XMLSchema) document = XmlDocument(schema=XMLSchema(schema)) self.assertTrue(document.schema.url.endswith(schema)) self.assertIsInstance(document.schema, XMLSchema) self.assertIsInstance(PwDocument(), PwDocument) self.assertIsInstance(PwDocument(schema=schema), PwDocument) schema = os.path.join(self.schemas_dir, 'ph_temp.xsd') self.assertIsInstance(PhononDocument(), PhononDocument) self.assertIsInstance(PhononDocument(schema=schema), PhononDocument) schema = os.path.join(self.schemas_dir, 'qes_neb.xsd') self.assertIsInstance(NebDocument(), NebDocument) self.assertIsInstance(NebDocument(schema=schema), NebDocument) schema = os.path.join(self.schemas_dir, 'tddfpt.xsd') self.assertIsInstance(TdDocument(), TdDocument) self.assertIsInstance(TdDocument(schema=schema), TdDocument) schema = os.path.join(self.schemas_dir, 'qes_spectrum.xsd') self.assertIsInstance(TdSpectrumDocument(), TdSpectrumDocument) self.assertIsInstance(TdSpectrumDocument(schema=schema), TdSpectrumDocument)
def test_pw_output_get_ks_eigenvalues(self): xml_filename = os.path.join(self.test_dir, 'resources/pw/Ni.xml') document = PwDocument(source=xml_filename) ks_eigenvalues = document.get_ks_eigenvalues() self.assertEqual(len(ks_eigenvalues), 6) for row in ks_eigenvalues: self.assertEqual(len(row), 18) for value in row: self.assertIsInstance(value, float)
def test_pw_document(self): xml_filename = os.path.join(self.test_dir, 'examples/pw/Al001_relax_bfgs.xml') document = PwDocument() document.read(xml_filename) self.assertTrue(hasattr(document.root, 'tag')) self.assertEqual( document.root.tag, '{http://www.quantum-espresso.org/ns/qes/qes-1.0}espresso') self.assertEqual(document.filename, xml_filename) self.assertEqual(document.format, 'xml') self.assertEqual(document.input_path, 'input') self.assertEqual(document.output_path, 'output')
def test_pw_output_get_k_points(self): xml_filename = os.path.join(self.test_dir, 'resources/pw/Ni.xml') document = PwDocument(source=xml_filename) k_points = document.get_k_points() expected = [ [-0.1666666666666667, 0.1666666666666667, 0.1666666666666667], [0.5, -0.5, 0.8333333333333333], [0.1666666666666667, -0.1666666666666667, 0.5], [-0.1666666666666666, -1.166666666666667, 0.1666666666666666], [-0.4999999999999999, -0.8333333333333334, -0.1666666666666666], [0.5, -0.5, -0.5] ] self.assertListEqual(k_points, expected)
def test_exception_class(self): document = PwDocument() with self.assertRaises(XmlDocumentError): document.get_fortran_input() schema = os.path.join(self.schemas_dir, 'qes.xsd') document = TdSpectrumDocument(schema=schema) document.read( os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml')) with self.assertRaises(XmlDocumentError): document.get_fortran_input()
def test_init_with_schema_only(self): schema = os.path.join(self.schemas_dir, 'qes.xsd') document = PwDocument(schema=schema) self.assertIsInstance(document, PwDocument) self.assertTrue( document.schema.url.endswith("qeschema/schemas/qes.xsd")) document = PwDocument(schema='qes.xsd') self.assertIsInstance(document, PwDocument) self.assertTrue( document.schema.url.endswith("qeschema/schemas/qes.xsd")) document = PwDocument(schema='qes-20180511.xsd') self.assertIsInstance(document, PwDocument) self.assertTrue( document.schema.url.endswith( "qeschema/schemas/releases/qes-20180511.xsd"))
def test_init_from_xml_resource(self): xml_file = os.path.join(self.test_dir, 'resources/pw/CO_bgfs_relax.xml') document = PwDocument(source=XMLResource(xml_file)) if platform.system() == 'Linux': self.assertEqual(document.filename, xml_file) else: self.assertTrue(document.filename.endswith('CO_bgfs_relax.xml')) self.assertTrue( document.schema.url.endswith("qeschema/schemas/qes.xsd"))
def test_pw_get_atomic_positions(self): source = os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml') document = PwDocument(source) positions = document.get_atomic_positions() self.assertIsNone(positions) source = os.path.join(self.test_dir, 'resources/pw/Ni.xml') document = PwDocument(source) positions = document.get_atomic_positions() self.assertEqual(positions, (['Ni'], [[0.0, 0.0, 0.0]]))
def test_incomplete_schema(self): schema_path = os.path.join(self.test_dir, 'resources/dummy/incomplete.xsd') document = PwDocument(schema=schema_path) xml_filename = os.path.join(self.test_dir, 'resources/dummy/incomplete.xml') document.read(xml_filename) with self.assertRaises(XmlDocumentError) as ctx: document.get_fortran_input() self.assertEqual(str(ctx.exception), "Missing input './input' in XML data!") document.root.append(ElementTree.Element('input')) with self.assertRaises(XmlDocumentError) as ctx: document.get_fortran_input() self.assertEqual(str(ctx.exception), "Missing input element in XSD schema!")
def test_pw_document(self): xml_filename = os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml') document = PwDocument(source=xml_filename) self.assertTrue(hasattr(document.root, 'tag')) self.assertEqual( document.root.tag, '{http://www.quantum-espresso.org/ns/qes/qes-1.0}espresso') if platform.system() == 'Linux': self.assertEqual(document.filename, xml_filename) else: self.assertTrue(document.filename.endswith('Al001_relax_bfgs.xml')) self.assertEqual(document.format, 'xml') self.assertEqual(document.input_path, 'input') self.assertEqual(document.output_path, 'output')
def test_pw_get_cell_parameters(self): source = os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml') document = PwDocument(source) cells = document.get_cell_parameters() self.assertIsNone(cells) source = os.path.join(self.test_dir, 'resources/pw/Ni.xml') document = PwDocument(source) cells = document.get_cell_parameters() self.assertListEqual( cells, [[-3.325, 0.0, 3.325], [0.0, 3.325, 3.325], [-3.325, 3.325, 0.0]])
def test_fortran_input_generator(self): xml_filename = os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml') document = PwDocument() document.read(xml_filename) self.assertFalse(os.path.isfile(self.output_file)) document.write_fortran_input(self.output_file) with open(self.output_file) as f: fortran_input = f.read() if os.path.isfile(self.output_file): os.unlink(self.output_file) self.assertFalse(os.path.isfile(self.output_file)) self.assertEqual(fortran_input[:9], '&CONTROL\n') self.assertEqual(fortran_input, document.get_fortran_input())
def test_pw_get_stress(self): source = os.path.join(self.test_dir, 'resources/pw/Al001_relax_bfgs.xml') document = PwDocument(source) stress = document.get_stress() self.assertIsNone(stress) source = os.path.join(self.test_dir, 'resources/pw/Si.xml') document = PwDocument(source) stress = document.get_stress() self.assertListEqual( stress, [[ -1.825058728527109e-06, 1.058791184067875e-22, -1.058791184067875e-22 ], [1.058791184067875e-22, -1.825058728527109e-06, 0.0], [ -1.058791184067875e-22, 1.058791184067875e-22, -1.825058728527109e-06 ]])
def test_pw_output_get_forces(self): xml_filename = os.path.join(self.test_dir, 'resources/pw/Si.xml') document = PwDocument(source=xml_filename) self.assertIsNone(document.get_forces())
def test_pw_output_get_total_energy(self): xml_filename = os.path.join(self.test_dir, 'resources/pw/Ni.xml') document = PwDocument(source=xml_filename) total_energy = document.get_total_energy() self.assertEqual(total_energy, -30.44558256272531)
def test_unsupported_schema(self): with self.assertRaises(NotImplementedError): PwDocument(schema=os.path.join(self.test_dir, 'resources/dummy/schema.xsd'))
def test_init_with_schema_as_text(self): with open(os.path.join(self.schemas_dir, 'qes.xsd')) as fp: schema = fp.read() document = PwDocument(schema=schema) self.assertIsNone(document.schema.url)