def shadow(self, args): """ Helper function for `_shadow` that calls it on a flattened version of its argument. """ shadow_vars = [self._shadow_inner(x) for x in utils.flatten(args)] new_args = utils.unflatten(args, shadow_vars) self.context.shadowed_containers[id(new_args)] = args return new_args
def handle_escape(x): """ Handles escaping variables """ def escape(x): if isinstance(x, theano.tensor.sharedvar.SharedVariable): return x.get_value() elif utils.isvar(x): try: return x.eval() except: raise ValueError('Could not escape {0}'.format(x)) else: return x return utils.unflatten(x, [escape(i) for i in utils.flatten(x)])
def handle_escaped_call(fn, *args, **kwargs): esc_args = utils.unflatten( args, [TheanoTransformer.handle_escape(a) for a in utils.flatten(args)]) esc_kwargs = utils.unflatten( kwargs, [TheanoTransformer.handle_escape(a) for a in utils.flatten(kwargs)]) return fn(*esc_args, **esc_kwargs)