Source code for aiida.backends.tests.orm.data.test_data

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida-core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
"""Tests for the `Data` base class."""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

import os
import numpy

from aiida import orm
from aiida.backends.testbase import AiidaTestCase


[docs]class TestData(AiidaTestCase): """Test for the `Data` base class."""
[docs] @staticmethod def generate_class_instance(data_class): """Generate a dummy `Data` instance for the given sub class.""" dirpath_fixtures = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, 'fixtures')) if data_class is orm.CifData: instance = data_class(file=os.path.join(dirpath_fixtures, 'data', 'Si.cif')) return instance if data_class is orm.UpfData: filename = os.path.join(dirpath_fixtures, 'pseudos', 'Ba.pbesol-spn-rrkjus_psl.0.2.3-tot-pslib030.UPF') instance = data_class(file=filename) return instance if data_class is orm.StructureData: instance = orm.CifData(file=os.path.join(dirpath_fixtures, 'data', 'Si.cif')).get_structure() return instance if data_class is orm.BandsData: kpoints = orm.KpointsData() kpoints.set_cell([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) kpoints.set_kpoints([[0., 0., 0.], [0.1, 0.1, 0.1]]) instance = data_class() instance.set_kpointsdata(kpoints) instance.set_bands([[1.0, 2.0], [3.0, 4.0]]) return instance if data_class is orm.TrajectoryData: instance = data_class() stepids = numpy.array([60]) times = stepids * 0.01 cells = numpy.array([[[3., 0., 0.], [0., 3., 0.], [0., 0., 3.]]]) positions = numpy.array([[[0., 0., 0.]]]) instance.set_trajectory(stepids=stepids, cells=cells, symbols=['H'], positions=positions, times=times) return instance if data_class is orm.UpfData: filepath_base = os.path.abspath( os.path.join(__file__, os.pardir, os.pardir, os.pardir, 'fixtures', 'pseudos') ) filepath_carbon = os.path.join(filepath_base, 'C_pbe_v1.2.uspp.F.UPF') instance = data_class(file=filepath_carbon) return instance raise RuntimeError( 'no instance generator implemented for class `{}`. If you have added a `_prepare_*` method ' 'for this data class, add a generator of a dummy instance here'.format(data_class) )
[docs] def test_data_exporters(self): """Verify that the return value of the export methods of all `Data` sub classes have the correct type. It should be a tuple where the first should be a byte string and the second a dictionary. """ from aiida.plugins.entry_point import get_entry_points for entry_point in get_entry_points('aiida.data'): data_class = entry_point.load() export_formats = data_class.get_export_formats() if not export_formats: continue instance = self.generate_class_instance(data_class) for fileformat in export_formats: content, dictionary = instance._exportcontent(fileformat) # pylint: disable=protected-access self.assertIsInstance(content, bytes) self.assertIsInstance(dictionary, dict)