Changeset 169
- Timestamp:
- 04/30/08 23:00:30 (8 months ago)
- Files:
-
- projects/AsynCluster/trunk/doc/svpmc/example (added)
- projects/AsynCluster/trunk/doc/svpmc/example/dm-us.dat (moved) (moved from projects/AsynCluster/trunk/svpmc/test/dm-us.dat)
- projects/AsynCluster/trunk/doc/svpmc/example/jy-us.dat (moved) (moved from projects/AsynCluster/trunk/svpmc/test/jy-us.dat)
- projects/AsynCluster/trunk/doc/svpmc/example/project-spec.txt (moved) (moved from projects/AsynCluster/trunk/svpmc/test/project-spec.txt)
- projects/AsynCluster/trunk/doc/svpmc/example/us-bp.dat (moved) (moved from projects/AsynCluster/trunk/svpmc/test/us-bp.dat)
- projects/AsynCluster/trunk/svpmc/pmc.py (modified) (8 diffs)
- projects/AsynCluster/trunk/svpmc/test/test_pmc.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
projects/AsynCluster/trunk/svpmc/pmc.py
r168 r169 28 28 29 29 import params 30 from sample import resample30 from sample import Resampler 31 31 32 32 … … 62 62 to that deviation value, and a fresh deferred already fired with 63 63 C{None}. You must add a callback to the deferred for each iteration 64 that returns one or more 1-D arrays of the same length as the yielded65 index array.64 that returns a tuple of 1-D arrays, each being the same length as 65 the yielded index array. 66 66 67 67 Each returned array for each subset will be assembled back into a … … 70 70 """ 71 71 def gotResults(results, I): 72 if not isinstance(results, tuple): 73 results = (results,) 72 74 if not resultList: 73 75 for result in results: 74 if isinstance(result, (int, float)): 76 if isinstance(result, list) and len(result) == len(I): 77 resultList.append(s.empty(self.N)) 78 elif isinstance(result, s.ndarray): 75 79 resultList.append(s.empty(self.N)) 76 80 else: … … 97 101 """ 98 102 if I is None: 99 R = s elf.N * s.ones(self.P) / self.P103 R = s.ones(self.P) / self.P 100 104 elif hasattr(self, 'II'): 101 105 R = s.array( … … 111 115 R = s.clip(s.round_(self.N*R), self.rMin, self.rMax).astype(int) 112 116 # Twiddle the biggest one as needed to keep sum = Number of members 113 R[s.argmax(R)] += - sum(R)117 R[s.argmax(R)] += self.N - sum(R) 114 118 # Replace the old list and subset index 115 119 self.R = R … … 128 132 self.pm = projectManager 129 133 self.mm = projectManager.mgr 134 self.resampler = Resampler() 130 135 131 136 def _get_queue(self): … … 201 206 W[j:j+N_this] = wfd.getResult() 202 207 j += N_this 203 returnXP, W208 yield XP, W 204 209 205 210 @defer.deferredGenerator … … 240 245 XP, W = resultList 241 246 # Resample everything together 242 I = resample(W, N_members)247 I = self.resampler(W, N_members) 243 248 X = XP[I] 244 249 allocator.updateAllocations(I) projects/AsynCluster/trunk/svpmc/test/test_pmc.py
r168 r169 25 25 from zope.interface import implements 26 26 from twisted.internet import defer, interfaces 27 from asynqueue import ThreadQueue28 27 29 28 import model, pmc 30 from sample import resample31 29 import util 32 30 … … 35 33 36 34 37 class Mock_ThreadQueue(util.Mock): 38 def call(self, func, *args, **kw): 39 kw['delay'] = 0.01 40 return util.deferToLater(func, *args, **kw) 41 42 43 class Mock_ProjectManager(util.Mock): 44 def __init__(self, modelObj): 45 self.modelObj = modelObj 46 self.threadQueue = Mock_ThreadQueue() 35 class Test_Allocator(util.TestCase): 36 def setUp(self): 37 self.N = 100 38 self.V = [0.1, 0.01, 0.001] 39 self.allocator = pmc.Allocator(self.N, self.V) 40 41 def test_init(self): 42 self.failUnlessElementsEqual(self.allocator.R, [34, 33, 33]) 43 44 def test_subsetIndex(self): 45 R = self.allocator.R = [10, 20, 70] 46 self.allocator.Is = s.arange(sum(R)) 47 I_all = s.array([]) 48 for k, r in enumerate(R): 49 I = self.allocator.subsetIndex(k) 50 self.failUnlessEqual(len(I), r) 51 self.failUnless(min(I) >= 0) 52 self.failUnless(max(I) < self.N) 53 self.failIf(s.setmember1d(I, I_all).any()) 54 I_all = s.concatenate([I_all, I]) 55 self.failUnlessEqual(len(I_all), self.N) 56 57 def test_assembler(self): 58 def check(null): 59 self.failUnlessEqual(len(resultList), 2) 60 x, y = resultList 61 self.failUnlessEqual(s.diff(x).min(), 1) 62 self.failUnlessEqual(s.diff(x).max(), 1) 63 y0, y1 = divmod(y, 1) 64 self.failUnlessElementsEqual(y0, x) 65 self.failUnlessAlmostEqual(y1.max(), self.V[0]) 66 self.failUnlessAlmostEqual(y1.min(), self.V[-1]) 67 68 X = s.arange(self.N) 69 dList, resultList = [], [] 70 for v, I, d in self.allocator.assembler(resultList): 71 d.addCallback(lambda _: (X[I], X[I]+v)) 72 dList.append(d) 73 return defer.DeferredList(dList).addCallback(check) 74 75 76 class Mock_ModelManager(util.Mock): 77 def __init__(self): 47 78 self.resetCalls() 48 79 … … 51 82 self.callsPending = [] 52 83 self.stepCounter = 0 53 54 def likelihood(self, paramContainer, wiggle, remote=False, local=False):84 85 def likelihood(self, paramContainer, sigma, remote=False, local=False): 55 86 def done(results): 56 87 if self.callsPending: … … 68 99 69 100 70 class BaseTC(util.TestCase): 101 class Mock_PriorContainer(util.Mock): 102 def __init__(self): 103 self.callCounter = 0 104 105 def new(self): 106 self.callCounter += 1 107 return util.Mock_ParameterContainer(self.callCounter) 108 109 def proposal(self, paramContainer, sigma): 110 # TODO 111 pass 112 113 114 class Mock_ProjectManager(util.Mock): 115 def __init__(self, m=100): 116 self.m = m 117 self.mgr = Mock_ModelManager() 118 self.priors = Mock_PriorContainer() 119 120 def writeParams(paramArray): 121 pass 122 123 def done(self): 124 pass 125 126 127 class Test_PMC(util.TestCase): 71 128 def setUp(self): 72 self.mgr = model.ModelManager(projectManager) 73 self.mgr.caller = Mock_ModelCaller(self.mgr.modelMap) 74 if self.__class__ == Test_MCMC: 75 self.mc = mcmc.MCMC(self.mgr) 76 elif self.__class__ == Test_DE_MCMC: 77 self.mc = mcmc.DE_MCMC(self.mgr) 78 else: 79 self.mc = mcmc.PMC(self.mgr) 80 81 def tearDown(self): 82 self.consumer = None 83 return util.TestCase.tearDown(self) 84 85 def _analyzeSamples(self, null, delay=5): 86 from study.rinterface import Rinterface 87 ri = Rinterface() 88 ri.packages.append('coda') 89 mo = ri.rc('mcmc', s.concatenate(self.consumer.X)) 90 ri.rc('plot', mo) 91 return util.deferToLater(delay=delay) 92 93 94 class Test_PMC(BaseTC): 95 def test_subsetIndex(self): 96 R = self.mc.R = [10,20,15,5] 97 self.mc.Is = s.arange(sum(R)) 98 I_all = s.array([]) 99 for k, r in enumerate(R): 100 I = self.mc.subsetIndex(k) 101 self.failUnlessEqual(len(I), r) 102 self.failUnless(min(I) >= 0) 103 self.failUnless(max(I) < 200) 104 self.failIf(s.setmember1d(I, I_all).any()) 105 I_all = s.concatenate([I_all, I]) 106 129 self.pm = Mock_ProjectManager() 130 self.pmc = pmc.PMC(self.pm) 131 107 132 def test_proposals(self): 108 133 N = 5
