def __getitem__(self, index): """ Retreives items in index by looping through inputs as many times as needed. """ # TODO: Check if index exceeds length, either explicitly or implicitly. # Sort index index = sorted(index_to_list(index)) above = [i for i in index if i >= self.position] # Go forward to reach these below = [i for i in index if i < self.position ] # Will have to reset the loop to reach these if len(above) > 0: above_values = fireworks.cat( [self.step_forward(i + 1) for i in above]) else: above_values = Message() if len(below) > 0: self.reset() # Position will now be reset to 0 below_values = fireworks.cat( [self.step_forward(i + 1) for i in below]) else: below_values = Message() return below_values.append( above_values ) # TODO: Resort this message so values are in the order requested by index
class LocalMemoryFactory(Factory): """ Factory that stores parameters in memory. """ def get_connection(self): self.params = Message() self.computed_metrics = defaultdict(Message) def read(self): return self.params, self.computed_metrics def write(self, params, metrics_dict): self.params = self.params.append(params) for key in metrics_dict: self.computed_metrics[key] = self.computed_metrics[key].append(metrics_dict[key])