def bounded_mean(mean_x, samples, xmin, xmax, wts=None): from mystic.math.measures import impose_mean, impose_spread from mystic.math.measures import spread, mean from numpy import asarray a = impose_mean(mean_x, samples, wts) if min(a) < xmin: # maintain the bound #print "violate lo(a)" s = spread(a) - 2*(xmin - min(a)) #XXX: needs compensation (as below) ? a = impose_mean(mean_x, impose_spread(s, samples, wts), wts) if max(a) > xmax: # maintain the bound #print "violate hi(a)" s = spread(a) + 2*(xmax - max(a)) #XXX: needs compensation (as below) ? a = impose_mean(mean_x, impose_spread(s, samples, wts), wts) return asarray(a)
def test_with_mean_spread(): from mystic.math.measures import mean, spread, impose_mean, impose_spread @with_spread(50.0) @with_mean(5.0) def constrained_squared(x): return [i**2 for i in x] from numpy import array x = array([1, 2, 3, 4, 5]) y = impose_spread(50.0, impose_mean(5.0, [i**2 for i in x])) assert almostEqual(mean(y), 5.0, tol=1e-15) assert almostEqual(spread(y), 50.0, tol=1e-15) assert constrained_squared(x) == y
def test_with_mean_spread(): from mystic.math.measures import mean, spread, impose_mean, impose_spread @with_spread(50.0) @with_mean(5.0) def constrained_squared(x): return [i**2 for i in x] from numpy import array x = array([1,2,3,4,5]) y = impose_spread(50.0, impose_mean(5.0,[i**2 for i in x])) assert almostEqual(mean(y), 5.0, tol=1e-15) assert almostEqual(spread(y), 50.0, tol=1e-15) assert constrained_squared(x) == y
def test_inner_constraints(): from mystic.math.measures import impose_mean, impose_spread def impose_constraints(x, mean=0.0, spread=1.0): x = impose_mean(mean, x) x = impose_spread(spread, x) return x @inner(inner=impose_constraints, kwds={'mean': 5.0, 'spread': 50.0}) def constrained_squared(x): return [i**2 for i in x] from numpy import array x = array([1, 2, 3, 4, 5]) y = impose_spread(50.0, impose_mean(5.0, x)) assert constrained_squared(x) == [i**2 for i in y]
def test_inner_constraints(): from mystic.math.measures import impose_mean, impose_spread def impose_constraints(x, mean=0.0, spread=1.0): x = impose_mean(mean, x) x = impose_spread(spread, x) return x @inner(inner=impose_constraints, kwds={'mean':5.0, 'spread':50.0}) def constrained_squared(x): return [i**2 for i in x] from numpy import array x = array([1,2,3,4,5]) y = impose_spread(50.0, impose_mean(5.0,x)) assert constrained_squared(x) == [i**2 for i in y]
def test_proxified_constraints(): from mystic.math.measures import impose_mean, impose_spread def impose_constraints(x, mean=0.0, spread=1.0): x = impose_mean(mean, x) x = impose_spread(spread, x) return x @inner_proxy(inner=impose_constraints) def constrained_squared(x): #XXX: proxy doesn't preserve function signature return [i**2 for i in x] from numpy import array x = array([1,2,3,4,5]) y = impose_spread(50.0, impose_mean(5.0,x)) assert constrained_squared(x, 5.0, 50.0) == [i**2 for i in y]
def impose_constraints(x, mean=0.0, spread=1.0): x = impose_mean(mean, x) x = impose_spread(spread, x) return x
def range_constraint(x, spread=1.0): return impose_spread(spread, x)
def __set_range(self, r): self.positions = impose_spread(r, self.positions, self.weights) return