def read_first_frame(self): time = self._read_line_time() all_values = [] self.res_plong.add_reach(REACH_NAME) for i in range(self.nb_sections): pk_id, pk, values = self._read_line_resultat() if pk_id != i + 1: self.error('Unexpected section number: %i (instead of %i)' % (pk_id, i + 1)) if i == 0: # There is at least 3 compulsory layers: water, bottom (= first top layer elevation) and rigid bed self.nb_layers = len(values) - 2 if self.nb_layers < 1: raise CourlisException('No layer could be found!') for j in range(len(values)): if j == 0: var_name = 'Z_water' elif j == len(values) - 1: var_name = 'Z_rb' else: var_name = 'Z_%i' % j self.res_plong.add_variable(var_name) self.res_plong.add_section(REACH_NAME, pk) all_values.append(values) self.res_plong.add_frame(time, {REACH_NAME: np.array(all_values)})
def get_variable_with_section(self, reach_name, section, varname): pos_var = self.variable_names.index(varname) try: pos_section = self.model[reach_name].index(section) except ValueError: raise CourlisException('River reach `%s` not found (among: %s)' % (reach_name, list(self.model.keys()))) result = [] for time in self.time_serie: result.append(self.data[time][reach_name][pos_section, pos_var]) return np.array(result)
def __enter__(self): for i, encoding in enumerate(ReadOptFile.ENCODINGS): try: self.file = open(self.filename, 'r', encoding=encoding) self.lines = self.file.readlines() break except UnicodeDecodeError as e: if i == len(self.filename) - 1: raise CourlisException("Encoding not supported\n%s" % e) self._read_data() return self
def error(self, message, show_line=True): error_message = message + '\n' if show_line: error_message += 'Guilty line n°%i:\n' % self.current_line_id error_message += self.lines[self.current_line_id - 1].rstrip('\n') raise CourlisException(error_message)
def add_frame(self, time, values): if time in self.time_serie: raise CourlisException('Time %f already exists' % time) self.data[time] = values self.time_serie.append(time) self.nb_frames += 1
def add_variable(self, varname): if varname in self.variable_names: raise CourlisException('Variable `%s` already exists' % varname) self.variable_names.append(varname) self.nb_variables += 1