source: branches/decorate/test_wrapper.py @ 855

Revision 855, 3.0 KB checked in by mmckerns, 5 months ago (diff)

updated copyright to 2016

Line 
1#!/usr/bin/env python
2#
3# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
4# Copyright (c) 2012-2016 California Institute of Technology.
5# License: 3-clause BSD.  The full license text is available at:
6#  - http://mmckerns.github.io/project/mystic/browser/mystic/LICENSE
7
8from wrapper import *
9from mystic.math import almostEqual
10
11def test_monitored():
12
13  from mystic.monitors import Monitor
14  mon = Monitor()
15  @monitored(monitor=mon)
16  def squared(x):
17    return x**2
18
19  x = range(10)
20  y = [squared(i) for i in x]
21  assert y == mon.y
22  assert x == mon.x
23
24
25def test_counted():
26
27  @counted
28  def squared(x, n=0.0):
29    return x**2 + n
30
31  _ = squared(-1)
32  _ = [squared(i) for i in range(10)]
33  n,y = squared(10, 100)
34  assert n[0] == 12
35  assert y == 10**2 + 100
36
37  from numpy import array
38  x = array([1,2,3,4,5])
39  n,y = squared(x, 1)
40  assert n[0] == 13
41  assert all(y == x**2 + 1)
42
43
44def test_monitored_counted():
45
46  from mystic.monitors import Monitor
47  mon = Monitor()
48  @monitoredcounted(monitor=mon)
49  def squared(x):
50    return x**2
51
52  _ = squared(-1)
53  _ = [squared(i) for i in range(10)]
54  n,y = squared(10)
55  assert n[0] == 12
56  assert y == 10**2
57
58  x = [-1] + range(10) + [10]
59  assert mon.x == x
60  assert mon.y == [i**2 for i in x]
61
62
63def test_bounded():
64
65  @bounded(min=1,max=9.9999)
66  def squared(x):
67    return x**2
68
69  from numpy import array, inf
70  x = range(11)
71  y = [squared(i) for i in x]
72  assert y == [i**2 if i in range(1,10) else inf for i in x]
73
74  x = array(x)
75  y = squared(x)
76  assert y == inf #XXX: better, [i**2 if i in range(1,10) else inf for i in x] ?
77
78
79def test_clip_bounded():
80
81  @clip_bounded(min=1.0,max=9.9999)
82  def squared(x):
83    return x**2
84
85  from numpy import array, arange
86  x = range(11)
87  y = [squared(i) for i in x]
88  assert y == [min(max(i,1.0),9.9999)**2 for i in x]
89
90  y = squared(x)
91  assert all(y == array([min(max(i,1.0),9.9999)**2 for i in x]))
92
93
94def test_target_bounded():
95
96  @target_bounded(min=1.0,max=9.9999,target=5.0)
97  def squared(x):
98    return x**2
99
100  from numpy import array, arange
101  x = range(11)
102  y = [squared(i) for i in x]
103  assert y == [i**2 if 1.0 <= i <= 9.999 else 5.0**2 for i in x]
104
105  y = squared(x)
106  assert all(y == [i**2 if 1.0 <= i <= 9.9999 else 5.0**2 for i in x])
107
108
109def test_bounce_bounded():
110
111  from mystic.math.measures import impose_mean, mean
112
113  @bounce_bounded(min=1.0,max=9.9999)
114  def set_mean(x, m):
115    return impose_mean(m, x)
116
117  from numpy import array, arange
118  x = range(11)
119  assert almostEqual(mean(set_mean(x, 5.0)), 5.0)
120
121
122def test_mixedin():
123
124  def squared(x, *args): #XXX: needs to have same number of arguments
125    return x**2
126
127  @mixedin(mixin=squared, shift=1, normalized=True)
128  def plus_and_squared(x, n=0):
129    return x + n
130
131  assert plus_and_squared(2) == ((2**2) + (2+0))/2.0
132  assert plus_and_squared(3,1) == ((3**2) + (3+1))/2.0
133
134
135if __name__ == '__main__':
136  test_monitored()
137  test_counted()
138  test_monitored_counted()
139  test_bounded()
140  test_mixedin()
141  test_clip_bounded()
142  test_target_bounded()
143  test_bounce_bounded()
144
145
146# EOF
Note: See TracBrowser for help on using the repository browser.