Changeset 163

Show
Ignore:
Timestamp:
04/29/08 01:32:02 (8 months ago)
Author:
edsuom
Message:

Working on prior and parameter containers, starting to tie everything together

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • projects/AsynCluster/trunk/svpmc/model.py

    r161 r163  
    177177    ########################################################################### 
    178178    """ 
    179     def __init__(self, projectSpec): 
    180         sp = SpecParser(projectSpec) 
    181         self.priors = sp.priorContainer() 
    182         self.modelObj = Model(tsList=sp.timeSeries()) 
     179    def __init__(self, projectManager): 
     180        self.mgr = projectManager 
     181        self.modelObj = Model( 
     182            paramNames=projectManager.paramNames, 
     183            tsList=projectManager.timeSeries) 
    183184        self.queue = NullQueue(1) 
    184185        reactor.addSystemEventTrigger( 
     
    298299 
    299300    keyAttrs = {'tsList':None, 'Mv':50, 'Mz':50} 
    300     paramNames = params.PARAM_NAMES 
    301301 
    302302    #--- Properties ----------------------------------------------------------- 
  • projects/AsynCluster/trunk/svpmc/pmc.py

    r161 r163  
    3737 
    3838 
    39 class Recorder(object): 
    40     """ 
    41     For each iteration of an instance of L{PMC}, I update an open NetCDF file 
    42     with the posterior draws represented by a flex-array of parameter 
    43     containers. 
    44     """ 
    45     def __init__(self, filePath): 
    46         self.cdf = NetCDF.NetCDFFile(filePath, 'w') 
    47          
    48  
    49     def restart(self): 
    50         for consumer, isFinishable in self.consumers: 
    51             consumer.registerProducer(self, True) 
    52         self.resumeProducing() 
    53  
    54     def gotNext(self, X): 
    55         if self.producing: 
    56             for consumer, isFinishable in self.consumers: 
    57                 consumer.write(X) 
    58  
    59     def registerConsumer(self, consumer): 
    60         """ 
    61         Call this with a provider of I{interfaces.IConsumer} and I'll 
    62         produce for it in addition to any others already registered 
    63         with me. 
    64         """ 
    65         if not interfaces.IConsumer.providedBy(consumer): 
    66             raise NotImplementedError( 
    67                 "Object doesn't provide the IConsumer interface") 
    68         isFinishable = interfaces.IFinishableConsumer.providedBy(consumer) 
    69         self.consumers.append((consumer, isFinishable)) 
    70      
    71     #--- IPushProducer implementation ----------------------------------------- 
    72      
    73     def pauseProducing(self): 
    74         self.producing = False 
    75      
    76     def resumeProducing(self): 
    77         self.producing = True 
    78      
    79     def stopProducing(self): 
    80         self.producing = False 
    81         for consumer, isFinishable in self.consumers: 
    82             if isFinishable: 
    83                 consumer.finish() 
    84             consumer.unregisterProducer() 
    85  
    86  
    8739class PMC(object): 
    8840    """ 
     
    9244    V = [1.0, 0.5, 0.1, 0.05, 0.01] 
    9345     
    94     def __init__(self, modelManager, **kw): 
    95         self.mgr = modelManager 
    96         self.recorder = Recorder(self.mgr) 
    97         for name, value in kw.iteritems(): 
    98             setattr(self, name, value) 
    99  
     46    def __init__(self, projectManager): 
     47        self.mgr = projectManager 
     48     
    10049    def setupRun(self, N_iter, N_members): 
    10150        """ 
     
    10655        self.N_members = N_members 
    10756        self.iterationProducer.restart() 
    108  
    109     def subscribe(self, consumer): 
    110         """ 
    111         Subscribes the supplied provider of L{interfaces.IConsumer} to receive 
    112         an array of parameter values for each iteration of my runs. The arrays 
    113         will have one parameter vector per row, and one row for each chain or 
    114         population member. 
    115         """ 
    116         self.iterationProducer.registerConsumer(consumer) 
    11757 
    11858    def _get_queue(self):