Source code for pmesh.tools
"""
.. deprecated:: 0.1
"""
import warnings
warnings.warn("tools.py is deprecated", DeprecationWarning)
from mpi4py import MPI
[docs]class Rotator(object):
def __init__(self, comm):
self.comm = comm
def __enter__(self):
self.comm.Barrier()
for i in range(self.comm.rank):
self.comm.Barrier()
def __exit__(self, type, value, tb):
for i in range(self.comm.rank, self.comm.size):
self.comm.Barrier()
self.comm.Barrier()
[docs]def FromRoot(comm):
def decorator(func):
def wrapped(*args, **kwargs):
if comm.rank == 0:
rt = func(*args, **kwargs)
else:
rt = None
rt = comm.bcast(rt)
return rt
return wrapped
return decorator
[docs]class Timer(object):
def __init__(self, comm):
self.comm = comm
self.t0 = 1.0 * MPI.Wtime()
self.spent = 0.
def __enter__(self):
self.t0 = 1.0 * MPI.Wtime()
def __exit__(self, *args, **kwargs):
t1 = 1.0 * MPI.Wtime()
self.spent += t1 - self.t0
[docs]class Timers(dict):
def __init__(self, comm=None):
self.comm = comm
def __getitem__(self, key):
if not dict.__contains__(self, key):
self[key] = Timer(self.comm)
return dict.__getitem__(self, key)
def __str__(self):
return '\n'.join(['%s: %g' % (key, self[key].spent) for key in self])