提交 a9d29a8a authored 作者: Olivier Breuleux's avatar Olivier Breuleux

merge

...@@ -45,6 +45,7 @@ def experimental_linker(env, target = None): ...@@ -45,6 +45,7 @@ def experimental_linker(env, target = None):
else: else:
raise NotImplementedError("Cannot write thunk representation to a file.") raise NotImplementedError("Cannot write thunk representation to a file.")
# def experimental_linker(env, target = None): # def experimental_linker(env, target = None):
# def fetch(op): # def fetch(op):
# try: # try:
......
...@@ -884,6 +884,19 @@ class exp(elemwise): ...@@ -884,6 +884,19 @@ class exp(elemwise):
return "z_i = exp(x_i);" return "z_i = exp(x_i);"
## Logarithm ##
class log(elemwise):
impl = numpy.log
def c_foreach((x_i, ), (z_i, )):
return "z_i = log(x_i);"
class log2(elemwise):
impl = numpy.log2
def c_foreach((x_i, ), (z_i, )):
return "z_i = log(x_i);"
## Element-wise division ## ## Element-wise division ##
class div_elemwise(elemwise): class div_elemwise(elemwise):
...@@ -1109,6 +1122,7 @@ class dot(omega_op): ...@@ -1109,6 +1122,7 @@ class dot(omega_op):
return dot(gz, transpose(y)), dot(transpose(x), gz) return dot(gz, transpose(y)), dot(transpose(x), gz)
def specs(x, y): def specs(x, y):
# todo: handle all tensors! # todo: handle all tensors!
assert x[2][1] == y[2][0]
shape = (x[2][0], y[2][1]) shape = (x[2][0], y[2][1])
return (numpy.ndarray, upcast(x[1], y[1]), shape) return (numpy.ndarray, upcast(x[1], y[1]), shape)
def c_headers(self): def c_headers(self):
......
...@@ -220,8 +220,8 @@ class PythonOp(Op): ...@@ -220,8 +220,8 @@ class PythonOp(Op):
def _perform(self): def _perform(self):
results = self._impl() results = self._impl()
if self.nout == 1: if self.nout == 1:
#self.out.set_value(results) self.out.set_value(results)
self.outputs[0].data = results # self.outputs[0].data = results
else: else:
assert self.nout == len(results) assert self.nout == len(results)
for result, output in zip(results, self.outputs): for result, output in zip(results, self.outputs):
......
def perform_linker(env, target = None): def perform_linker(env, target = None):
order = env.toposort()
thunks = [op.perform for op in order]
def ret():
for thunk in thunks:
thunk()
if not target:
return ret
else:
raise NotImplementedError("Cannot write thunk representation to a file.")
def perform_linker_nochecks(env, target = None):
order = env.toposort() order = env.toposort()
thunks = [op._perform for op in order] thunks = [op._perform for op in order]
def ret(): def ret():
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论