def __new__(cls, mode, **generators): if mode is True or mode == 'basic': obj = object.__new__(BasicHaloExchangeBuilder) elif mode == 'diag': obj = object.__new__(DiagHaloExchangeBuilder) elif mode == 'overlap': obj = object.__new__(OverlapHaloExchangeBuilder) elif mode == 'overlap2': obj = object.__new__(Overlap2HaloExchangeBuilder) elif mode == 'full': obj = object.__new__(FullHaloExchangeBuilder) else: assert False, "unexpected value `mode=%s`" % mode # Unique name generators obj._gen_msgkey = generators.get('msg', generator()) obj._gen_commkey = generators.get('comm', generator()) obj._gen_compkey = generators.get('comp', generator()) obj._cache_halo = OrderedDict() obj._cache_dims = OrderedDict() obj._objs = OrderedSet() obj._regions = OrderedDict() obj._msgs = OrderedDict() obj._efuncs = [] return obj
def __new__(cls, mode, **generators): obj = object.__new__(mpi_registry[mode]) # Unique name generators obj._gen_msgkey = generators.get('msg', generator()) obj._gen_commkey = generators.get('comm', generator()) obj._gen_compkey = generators.get('comp', generator()) obj._cache_halo = OrderedDict() obj._cache_dims = OrderedDict() obj._objs = OrderedSet() obj._regions = OrderedDict() obj._msgs = OrderedDict() obj._efuncs = [] return obj