def add_results(self, results: List[Dict[str, VALUE]]) -> int: """ Adds a sequence of results to the DataSet. Args: results: list of name-value dictionaries where each dictionary provides the values for the parameters in that result. If some parameters are missing the corresponding values are assumed to be None Returns: the index in the DataSet that the **first** result was stored at It is an error to provide a value for a key or keyword that is not the name of a parameter in this DataSet. It is an error to add results to a completed DataSet. """ if self.pristine: raise RuntimeError('This DataSet has not been marked as started. ' 'Please mark the DataSet as started before ' 'adding results to it.') if self.completed: raise CompletedError('This DataSet is complete, no further ' 'results can be added to it.') expected_keys = frozenset.union(*[frozenset(d) for d in results]) values = [[d.get(k, None) for k in expected_keys] for d in results] len_before_add = length(self.conn, self.table_name) insert_many_values(self.conn, self.table_name, list(expected_keys), values) return len_before_add
def __len__(self) -> int: return length(self.conn, self.table_name)