Coverage for gpaw/test/test_mpicomm.py: 65%
43 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
1import numpy as np
2from gpaw import debug
3from gpaw.mpi import world, serial_comm, _Communicator, SerialCommunicator
6def test_mpicomm():
7 even_comm = world.new_communicator(np.arange(0, world.size, 2))
8 if world.size > 1:
9 odd_comm = world.new_communicator(np.arange(1, world.size, 2))
10 else:
11 odd_comm = None
13 if world.rank % 2 == 0:
14 assert odd_comm is None
15 comm = even_comm
16 else:
17 assert even_comm is None
18 comm = odd_comm
20 hasmpi = False
21 try:
22 import gpaw.cgpaw as cgpaw
23 hasmpi = hasattr(cgpaw, 'Communicator') and world.size > 1
24 except (ImportError, AttributeError):
25 pass
27 assert world.parent is None
28 assert comm.parent is world
29 if hasmpi:
30 assert comm.parent.get_c_object() is world.get_c_object()
31 assert comm.get_c_object().parent is world.get_c_object()
33 commranks = np.arange(world.rank % 2, world.size, 2)
34 assert np.all(comm.get_members() == commranks)
35 assert comm.get_members()[comm.rank] == world.rank
37 subcomm = comm.new_communicator(np.array([comm.rank]))
38 assert subcomm.parent is comm
39 assert subcomm.rank == 0 and subcomm.size == 1
40 assert subcomm.get_members().item() == comm.rank
42 if debug:
43 assert isinstance(world, _Communicator)
44 assert isinstance(comm, _Communicator)
45 assert isinstance(subcomm, _Communicator)
46 elif world is serial_comm:
47 assert isinstance(world, SerialCommunicator)
48 assert isinstance(comm, SerialCommunicator)
49 assert isinstance(subcomm, SerialCommunicator)
50 elif hasmpi:
51 assert isinstance(world, cgpaw.Communicator)
52 assert isinstance(comm, cgpaw.Communicator)
53 assert isinstance(subcomm, cgpaw.Communicator)