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

1import numpy as np 

2from gpaw import debug 

3from gpaw.mpi import world, serial_comm, _Communicator, SerialCommunicator 

4 

5 

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 

12 

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 

19 

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 

26 

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() 

32 

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 

36 

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 

41 

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)