Commit b1f9d1a2 authored by theos's avatar theos
Browse files

Reworked apply_scalar_function in order to avoid unnecessary array copying.

parent 03a8b938
...@@ -406,32 +406,26 @@ class distributed_data_object(object): ...@@ -406,32 +406,26 @@ class distributed_data_object(object):
""" """
remember_hermitianQ = self.hermitian remember_hermitianQ = self.hermitian
if inplace is True: local_data = self.get_local_data(copy=False)
temp = self try:
if dtype is not None and self.dtype != np.dtype(dtype): result_data = function(local_data)
about.warnings.cprint( except:
"WARNING: Inplace dtype conversion is not possible!") about.warnings.cprint(
"WARNING: Trying to use np.vectorize!")
result_data = np.vectorize(function)(local_data)
if inplace is True:
result_d2o = self
else: else:
temp = self.copy_empty(dtype=dtype) result_d2o = self.copy_empty(dtype=result_data.dtype)
if np.prod(self.local_shape) != 0: result_d2o.set_local_data(result_data, copy=False)
try:
temp.data[:] = function(self.data)
except:
about.warnings.cprint(
"WARNING: Trying to use np.vectorize!")
temp.data[:] = np.vectorize(function)(self.data)
else:
# Noting to do here. The value-empty array
# is also geometrically empty
pass
if function in (np.exp, np.log): if function in (np.exp, np.log):
temp.hermitian = remember_hermitianQ result_d2o.hermitian = remember_hermitianQ
else: else:
temp.hermitian = False result_d2o.hermitian = False
return temp return result_d2o
def apply_generator(self, generator, copy=False): def apply_generator(self, generator, copy=False):
""" Evaluates generator(local_shape) and stores the result locally. """ Evaluates generator(local_shape) and stores the result locally.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment