def write(self, data: base.LoggingData): """Writes a `data` into a row of comma-separated values.""" # Only log if `time_delta` seconds have passed since last logging event. now = time.time() # TODO(b/192227744): Remove this in favour of filters.TimeFilter. elapsed = now - self._last_log_time if elapsed < self._time_delta: logging.debug( 'Not due to log for another %.2f seconds, dropping data.', self._time_delta - elapsed) return self._last_log_time = now # Append row to CSV. data = base.to_numpy(data) # Use fields from initial `data` to create the header. If extra fields are # present in subsequent `data`, we ignore them. if not self._writer: fields = sorted(data.keys()) self._writer = csv.DictWriter(self._file, fieldnames=fields, extrasaction='ignore') # Write header only if the file is empty. if not self._file.tell(): self._writer.writeheader() self._writer.writerow(data) # Flush every `flush_every` writes. if self._writes % self._flush_every == 0: self.flush() self._writes += 1
def write(self, data: base.LoggingData): """Writes a `data` into a row of comma-separated values.""" # Only log if `time_delta` seconds have passed since last logging event. now = time.time() if now - self._last_log_time < self._time_delta: return self._last_log_time = now # Append row to CSV. data = base.to_numpy(data) if not self._writer: keys = sorted(data.keys()) self._writer = csv.DictWriter(self._file, fieldnames=keys) self._writer.writeheader() self._writer.writerow(data)
def write(self, data: base.LoggingData): """Writes a `data` into a row of comma-separated values.""" # Only log if `time_delta` seconds have passed since last logging event. now = time.time() if now - self._time < self._time_delta: return self._time = now # Append row to CSV. with self._open(self._file_path, mode='a') as f: data = base.to_numpy(data) keys = sorted(data.keys()) writer = csv.DictWriter(f, fieldnames=keys) if not self._header_exists: # Only write the column headers once. writer.writeheader() self._header_exists = True writer.writerow(data)
def write(self, data: base.LoggingData): """Writes a `data` into a row of comma-separated values.""" # Only log if `time_delta` seconds have passed since last logging event. now = time.time() if now - self._last_log_time < self._time_delta: return self._last_log_time = now # Append row to CSV. data = base.to_numpy(data) # Use fields from initial `data` to create the header. If extra fields are # present in subsequent `data`, we ignore them. if not self._writer: fields = sorted(data.keys()) self._writer = csv.DictWriter(self._file, fieldnames=fields, extrasaction='ignore') self._writer.writeheader() self._writer.writerow(data)
def _format_value(value: Any) -> str: """Internal function for formatting values.""" value = base.to_numpy(value) if isinstance(value, (float, np.number)): return f'{value:0.3f}' return f'{value}'
def test_device_array_serialisation(self): data = {'x': jnp.zeros(shape=(32, ))} output = base.to_numpy(data) expected = {'x': np.zeros(shape=(32, ))} np.testing.assert_array_equal(output['x'], expected['x'])