Beispiel #1
0
	def helper(self, *args, **kwargs):
		if any(needsSampling(arg) for arg in itertools.chain(args, kwargs.values())):
			return VectorMethodDistribution(method, self, args, kwargs)
		elif any(needsLazyEvaluation(arg) for arg in itertools.chain(args, kwargs.values())):
			# see analogous comment in distributionFunction
			return makeDelayedFunctionCall(helper, (self,) + args, kwargs)
		else:
			return method(self, *args, **kwargs)
Beispiel #2
0
 def handler2(self, *args):
     if needsSampling(self):
         return VectorOperatorDistribution(op, self, args)
     elif any(needsSampling(arg) for arg in args):
         return VectorMethodDistribution(method, self, args, {})
     elif any(needsLazyEvaluation(arg) for arg in args):
         # see analogous comment in distributionFunction
         return makeDelayedFunctionCall(handler2, args, {})
     else:
         return method(self, *args)
Beispiel #3
0
		def helper(*args):
			if needsSampling(instance):
				return VectorOperatorDistribution(op, instance, args)
			elif any(needsSampling(arg) for arg in args):
				return VectorMethodDistribution(method, instance, args, {})
			elif any(needsLazyEvaluation(arg) for arg in args):
				# see analogous comment in distributionFunction
				return makeDelayedFunctionCall(helper, args, {})
			else:
				return wrapped(*args)
Beispiel #4
0
		def helper(*args, **kwargs):
			args = tuple(toDistribution(arg) for arg in args)
			kwargs = { name: toDistribution(arg) for name, arg in kwargs.items() }
			if any(needsSampling(arg) for arg in itertools.chain(args, kwargs.values())):
				return MethodDistribution(method, instance, args, kwargs)
			elif any(needsLazyEvaluation(arg)
			         for arg in itertools.chain(args, kwargs.values())):
				# see analogous comment in distributionFunction
				return makeDelayedFunctionCall(helper, args, kwargs)
			else:
				return wrapped(*args, **kwargs)
Beispiel #5
0
		def helper(*args, **kwargs):
			args = tuple(toDistribution(arg) for arg in args)
			kwargs = { name: toDistribution(arg) for name, arg in kwargs.items() }
			if any(needsSampling(arg) for arg in itertools.chain(args, kwargs.values())):
				return FunctionDistribution(wrapped, args, kwargs, support, valueType)
			elif any(needsLazyEvaluation(arg)
			         for arg in itertools.chain(args, kwargs.values())):
				# recursively call this helper (not the original function), since the
				# delayed arguments may evaluate to distributions, in which case we'll
				# have to make a FunctionDistribution
				return makeDelayedFunctionCall(helper, args, kwargs)
			else:
				return wrapped(*args, **kwargs)