Source code for mpi_array.globale_creation_test

"""
=================================================
The :mod:`mpi_array.globale_creation_test` Module
=================================================

Module for testing creation/factory functions which
generate instances of :mod:`mpi_array.globale.gndarray`.
Execute as::

   python -m mpi_array.globale_creation_test

and with parallelism::

   mpirun -n  2 python -m mpi_array.globale_creation_test
   mpirun -n  4 python -m mpi_array.globale_creation_test
   mpirun -n 27 python -m mpi_array.globale_creation_test


Classes
=======

.. autosummary::
   :toctree: generated/
   :template: autosummary/inherits_TestCase_class.rst

   GndarrayCreationTest - Tests for :func:`mpi_array.globale.gndarray` creation functions.
"""
from __future__ import absolute_import

import numpy as _np
import mpi4py.MPI as _mpi

from .license import license as _license, copyright as _copyright, version as _version
from . import unittest as _unittest
from . import logging as _logging  # noqa: E402,F401
from .globale import gndarray as _gndarray
from .globale_creation import asarray as _asarray, asanyarray as _asanyarray
from .globale_creation import empty as _empty, zeros as _zeros, ones as _ones, copy as _copy
from .globale_creation import empty_like as _empty_like, zeros_like as _zeros_like
from .globale_creation import ones_like as _ones_like
from . import locale as _locale
from .comms import create_distribution as _create_distribution, LT_PROCESS, LT_NODE, DT_CLONED
from .indexing import IndexingExtent as _IndexingExtent

__author__ = "Shane J. Latham"
__license__ = _license()
__copyright__ = _copyright()
__version__ = _version()


[docs]class GndarrayCreationTest(_unittest.TestCase): """ :obj:`unittest.TestCase` for :func:`mpi_array.globale.gndarray` instance generation. """
[docs] def test_asarray_with_scalar(self): """ :obj:`unittest.TestCase` for :func:`mpi_array.globale_creation.asarray`. """ sary0 = _asarray(5.0) self.assertTrue(sary0.__class__ is _gndarray) self.assertEqual(_np.dtype("float64"), sary0) self.assertEqual(0, sary0.ndim) self.assertSequenceEqual((), sary0.shape) self.assertTrue(sary0.locale_comms.peer_comm is _mpi.COMM_WORLD) sary1 = _asarray(sary0) self.assertTrue(sary1 is sary0)
[docs] def test_asarray_with_tuple(self): """ :obj:`unittest.TestCase` for :func:`mpi_array.globale_creation.asarray`. """ tary0 = _asarray(_np.linspace(100.0, 200.0, 101).tolist()) tary0.rank_logger.debug("tary0.num_locales = %s" % (tary0.num_locales,)) self.assertTrue(tary0.__class__ is _gndarray) self.assertEqual(_np.dtype("float64"), tary0) self.assertTrue(tary0.locale_comms.peer_comm is _mpi.COMM_WORLD) tary1 = _asarray(tary0) self.assertTrue(tary1 is tary0)
[docs] def test_asarray_with_subclass(self): """ :obj:`unittest.TestCase` for :func:`mpi_array.globale_creation.asarray`. """ class GndarraySubclass(_gndarray): pass candd = _create_distribution(shape=(8, 32, 32, 32)) lndarray_proxy, rma_window_buffer = \ _locale.empty( comms_and_distrib=candd, dtype="int8", order='C', return_rma_window_buffer=True ) ary_subclass = GndarraySubclass(candd, rma_window_buffer, lndarray_proxy) self.assertTrue(ary_subclass.__class__ is not _gndarray) self.assertTrue(isinstance(ary_subclass, _gndarray)) asary0 = _asarray(ary_subclass) self.assertTrue(asary0.__class__ is _gndarray)
[docs] def test_asanyarray_with_tuple(self): """ :obj:`unittest.TestCase` for :func:`mpi_array.globale_creation.asanyarray`. """ tary0 = _asanyarray(_np.linspace(100.0, 200.0, 101).tolist()) tary0.rank_logger.debug("tary0.num_locales = %s" % (tary0.num_locales,)) self.assertTrue(tary0.__class__ is _gndarray) self.assertEqual(_np.dtype("float64"), tary0) self.assertTrue(tary0.locale_comms.peer_comm is _mpi.COMM_WORLD) tary1 = _asanyarray(tary0) self.assertTrue(tary1 is tary0)
[docs] def test_asanyarray_with_subclass(self): """ :obj:`unittest.TestCase` for :func:`mpi_array.globale_creation.asanyarray`. """ class GndarraySubclass(_gndarray): pass candd = _create_distribution(shape=(8, 32, 32, 32)) lndarray_proxy, rma_window_buffer = \ _locale.empty( comms_and_distrib=candd, dtype="int8", order='C', return_rma_window_buffer=True ) ary_subclass = GndarraySubclass(candd, rma_window_buffer, lndarray_proxy) self.assertTrue(ary_subclass.__class__ is not _gndarray) self.assertTrue(isinstance(ary_subclass, _gndarray)) asanyary0 = _asanyarray(ary_subclass) self.assertTrue(asanyary0.__class__ is GndarraySubclass) self.assertTrue(asanyary0 is ary_subclass)
[docs] def test_empty_scalar(self): """ Test for :func:`mpi_array.globale.empty` and :func:`mpi_array.globale.empty_like`. """ gary = \ _empty( shape=(), dtype="float64", locale_type=LT_PROCESS, distrib_type=DT_CLONED ) gary.lndarray_proxy[...] = 4 self.assertEqual(4, gary.lndarray_proxy.lndarray)
[docs] def test_empty_shared_1d(self): """ Test for :func:`mpi_array.globale.empty` and :func:`mpi_array.globale.empty_like`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(shape=gshape) gary = _empty(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) self.assertSequenceEqual( list(lshape), list(_IndexingExtent(gary.lndarray_proxy.rank_view_slice_n).shape) ) gary1 = _empty_like(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) self.assertSequenceEqual( list(lshape), list(_IndexingExtent(gary1.lndarray_proxy.rank_view_slice_n).shape) ) ary = _empty_like(_np.zeros(lshape, dtype="int64")) self.assertEqual(_np.dtype("int64"), ary.dtype) self.assertSequenceEqual( list(lshape), list(ary.shape) )
[docs] def test_empty_non_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.empty` and :func:`mpi_array.globale_creation.empty_like`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(shape=gshape, locale_type=LT_PROCESS) gary = _empty(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) self.assertSequenceEqual(list(lshape), list(gary.lndarray_proxy.shape)) self.assertSequenceEqual( list(lshape), list(_IndexingExtent(gary.lndarray_proxy.rank_view_slice_n).shape) ) gary1 = _empty_like(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) self.assertSequenceEqual(list(lshape), list(gary1.lndarray_proxy.shape)) self.assertSequenceEqual( list(lshape), list(_IndexingExtent(gary1.lndarray_proxy.rank_view_slice_n).shape) )
[docs] def test_zeros_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.zeros` and :func:`mpi_array.globale_creation.zeros_like`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(shape=gshape, locale_type=LT_NODE) gary = _zeros(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary == 0).all()) gary1 = _zeros_like(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary1 == 0).all())
[docs] def test_zeros_non_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.zeros` and :func:`mpi_array.globale_creation.zeros_like`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(shape=gshape, locale_type=LT_PROCESS) gary = _zeros(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary == 0).all()) gary1 = _zeros_like(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary1 == 0).all())
[docs] def test_ones_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.ones` and :func:`mpi_array.globale_creation.ones_like`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(shape=gshape) gary = _ones(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary == 1).all()) gary1 = _ones_like(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary1 == 1).all())
[docs] def test_ones_non_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.ones` and :func:`mpi_array.globale_creation.ones_like`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(shape=gshape, locale_type=LT_PROCESS) gary = _ones(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary == 1).all()) gary1 = _ones_like(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary1 == 1).all())
[docs] def test_copy_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.copy`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(gshape) gary = _ones(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) gary.rank_view_n[...] = gary.locale_comms.peer_comm.rank gary1 = _copy(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary1 == gary).all())
[docs] def test_copy_non_shared_1d(self): """ Test for :func:`mpi_array.globale_creation.copy`. """ lshape = (10,) gshape = (_mpi.COMM_WORLD.size * lshape[0],) cand = _create_distribution(gshape, locale_type=LT_PROCESS) gary = _ones(comms_and_distrib=cand, dtype="int64") self.assertEqual(_np.dtype("int64"), gary.dtype) gary.rank_view_n[...] = gary.locale_comms.peer_comm.rank gary1 = _copy(gary) self.assertEqual(_np.dtype("int64"), gary1.dtype) gary.locale_comms.peer_comm.barrier() self.assertTrue((gary1 == gary).all())
_unittest.main(__name__) __all__ = [s for s in dir() if not s.startswith('_')]