示例#1
0
    def record_iteration_system(self, recording_requester, data, metadata):
        """
        Record data and metadata from a System.

        Parameters
        ----------
        recording_requester : System
            System in need of recording.
        data : dict
            Dictionary containing inputs, outputs, and residuals.
        metadata : dict
            Dictionary containing execution metadata.
        """
        inputs = data['i']
        outputs = data['o']
        residuals = data['r']

        inputs_array = values_to_array(inputs)
        outputs_array = values_to_array(outputs)
        residuals_array = values_to_array(residuals)

        inputs_blob = array_to_blob(inputs_array)
        outputs_blob = array_to_blob(outputs_array)
        residuals_blob = array_to_blob(residuals_array)

        with self.con:
            self.cursor.execute("INSERT INTO system_iterations(counter, iteration_coordinate, "
                                "timestamp, success, msg, inputs , outputs , residuals ) "
                                "VALUES(?,?,?,?,?,?,?,?)",
                                (self._counter, self._iteration_coordinate,
                                 metadata['timestamp'], metadata['success'],
                                 metadata['msg'], inputs_blob,
                                 outputs_blob, residuals_blob))
            self.cursor.execute("INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                                ('system', self.cursor.lastrowid))
示例#2
0
    def record_iteration_driver(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Driver.

        Parameters
        ----------
        recording_requester : object
            Driver in need of recording.
        data : dict
            Dictionary containing desvars, objectives, constraints, responses, and System vars.
        metadata : dict
            Dictionary containing execution metadata.
        """
        if self.con:
            outputs = data['out']
            inputs = data['in']

            outputs_array = values_to_array(outputs)
            inputs_array = values_to_array(inputs)

            outputs_blob = array_to_blob(outputs_array)
            inputs_blob = array_to_blob(inputs_array)

            with self.con:
                self.cursor.execute(
                    "INSERT INTO driver_iterations(counter, iteration_coordinate, "
                    "timestamp, success, msg, inputs, outputs) "
                    "VALUES(?,?,?,?,?,?,?)",
                    (self._counter, self._iteration_coordinate,
                     metadata['timestamp'], metadata['success'],
                     metadata['msg'], inputs_blob, outputs_blob))

                self.con.execute(
                    "INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                    ('driver', self.cursor.lastrowid))
示例#3
0
    def record_iteration_driver(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Driver.

        Parameters
        ----------
        recording_requester : object
            Driver in need of recording.
        data : dict
            Dictionary containing desvars, objectives, constraints, responses, and System vars.
        metadata : dict
            Dictionary containing execution metadata.
        """
        desvars = data['des']
        responses = data['res']
        objectives = data['obj']
        constraints = data['con']
        sysvars = data['sys']

        # Need to gather up the values from across the ranks, if MPI
        # if MPI:
        #     desvars = self._gather_vars(root, desvars)
        #     responses = self._gather_vars(root, responses)
        #     objectives = self._gather_vars(root, objectives)
        #     constraints = self._gather_vars(root, constraints)
        #     sysvars = self._gather_vars(root, sysvars)

        if MPI is None or MPI.COMM_WORLD.rank == 0:
            desvars_array = values_to_array(desvars)
            responses_array = values_to_array(responses)
            objectives_array = values_to_array(objectives)
            constraints_array = values_to_array(constraints)
            sysvars_array = values_to_array(sysvars)

            desvars_blob = array_to_blob(desvars_array)
            responses_blob = array_to_blob(responses_array)
            objectives_blob = array_to_blob(objectives_array)
            constraints_blob = array_to_blob(constraints_array)
            sysvars_blob = array_to_blob(sysvars_array)

            with self.con:
                self.cursor.execute(
                    "INSERT INTO driver_iterations(counter, iteration_coordinate, "
                    "timestamp, success, msg, desvars , responses , objectives , "
                    "constraints, sysincludes ) VALUES(?,?,?,?,?,?,?,?,?,?)",
                    (self._counter, self._iteration_coordinate,
                     metadata['timestamp'], metadata['success'],
                     metadata['msg'], desvars_blob, responses_blob,
                     objectives_blob, constraints_blob, sysvars_blob))
                self.con.execute(
                    "INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                    ('driver', self.cursor.lastrowid))
示例#4
0
    def record_iteration_driver(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Driver.

        Parameters
        ----------
        recording_requester : object
            Driver in need of recording.
        data : dict
            Dictionary containing desvars, objectives, constraints, responses, and System vars.
        metadata : dict
            Dictionary containing execution metadata.
        """
        desvars = data['des']
        responses = data['res']
        objectives = data['obj']
        constraints = data['con']
        sysvars = data['sys']

        # Need to gather up the values from across the ranks, if MPI
        # if MPI:
        #     desvars = self._gather_vars(root, desvars)
        #     responses = self._gather_vars(root, responses)
        #     objectives = self._gather_vars(root, objectives)
        #     constraints = self._gather_vars(root, constraints)
        #     sysvars = self._gather_vars(root, sysvars)

        if MPI is None or MPI.COMM_WORLD.rank == 0:
            desvars_array = values_to_array(desvars)
            responses_array = values_to_array(responses)
            objectives_array = values_to_array(objectives)
            constraints_array = values_to_array(constraints)
            sysvars_array = values_to_array(sysvars)

            desvars_blob = array_to_blob(desvars_array)
            responses_blob = array_to_blob(responses_array)
            objectives_blob = array_to_blob(objectives_array)
            constraints_blob = array_to_blob(constraints_array)
            sysvars_blob = array_to_blob(sysvars_array)

            with self.con:
                self.cursor.execute("INSERT INTO driver_iterations(counter, iteration_coordinate, "
                                    "timestamp, success, msg, desvars , responses , objectives , "
                                    "constraints, sysincludes ) VALUES(?,?,?,?,?,?,?,?,?,?)",
                                    (self._counter, self._iteration_coordinate,
                                     metadata['timestamp'], metadata['success'],
                                     metadata['msg'], desvars_blob,
                                     responses_blob, objectives_blob,
                                     constraints_blob, sysvars_blob))
                self.con.execute("INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                                 ('driver', self.cursor.lastrowid))
示例#5
0
    def record_derivatives_driver(self, recording_requester, data, metadata):
        """
        Record derivatives data from a Driver.

        Parameters
        ----------
        recording_requester : object
            Driver in need of recording.
        data : dict
            Dictionary containing derivatives keyed by 'of,wrt' to be recorded.
        metadata : dict
            Dictionary containing execution metadata.
        """
        if self.connection:

            data_array = values_to_array(data)
            data_blob = array_to_blob(data_array)

            with self.connection as c:
                c = c.cursor()  # need a real cursor for lastrowid

                c.execute("INSERT INTO driver_derivatives(counter, iteration_coordinate, "
                          "timestamp, success, msg, derivatives) VALUES(?,?,?,?,?,?)",
                          (self._counter, self._iteration_coordinate,
                           metadata['timestamp'], metadata['success'], metadata['msg'],
                           data_blob))
示例#6
0
    def record_iteration_problem(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Problem.

        Parameters
        ----------
        recording_requester : object
            Problem in need of recording.
        data : dict
            Dictionary containing desvars, objectives, and constraints.
        metadata : dict
            Dictionary containing execution metadata.
        """
        if self.connection:
            outputs = data['out']
            outputs_array = values_to_array(outputs)
            outputs_blob = array_to_blob(outputs_array)

            with self.connection as c:
                c = c.cursor()  # need a real cursor for lastrowid

                c.execute(
                    "INSERT INTO problem_cases(counter, case_name, "
                    "timestamp, success, msg, outputs) VALUES(?,?,?,?,?,?)",
                    (self._counter, metadata['name'], metadata['timestamp'],
                     metadata['success'], metadata['msg'], outputs_blob))
示例#7
0
    def record_derivatives_driver(self, recording_requester, data, metadata):
        """
        Record derivatives data from a Driver.

        Parameters
        ----------
        recording_requester : object
            Driver in need of recording.
        data : dict
            Dictionary containing derivatives keyed by 'of,wrt' to be recorded.
        metadata : dict
            Dictionary containing execution metadata.
        """
        if self.connection:

            data_array = values_to_array(data)
            data_blob = array_to_blob(data_array)

            with self.connection as c:
                c = c.cursor()  # need a real cursor for lastrowid

                c.execute("INSERT INTO driver_derivatives(counter, iteration_coordinate, "
                          "timestamp, success, msg, derivatives) VALUES(?,?,?,?,?,?)",
                          (self._counter, self._iteration_coordinate,
                           metadata['timestamp'], metadata['success'], metadata['msg'],
                           data_blob))
示例#8
0
    def record_iteration_solver(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Solver.

        Parameters
        ----------
        recording_requester : Solver
            Solver in need of recording.
        data : dict
            Dictionary containing outputs, residuals, and errors.
        metadata : dict
            Dictionary containing execution metadata.
        """
        if self.connection:
            abs = data['abs']
            rel = data['rel']
            inputs = data['i']
            outputs = data['o']
            residuals = data['r']

            inputs_array = values_to_array(inputs)
            outputs_array = values_to_array(outputs)
            residuals_array = values_to_array(residuals)

            inputs_blob = array_to_blob(inputs_array)
            outputs_blob = array_to_blob(outputs_array)
            residuals_blob = array_to_blob(residuals_array)

            with self.connection as c:
                c = c.cursor()  # need a real cursor for lastrowid

                c.execute(
                    "INSERT INTO solver_iterations(counter, iteration_coordinate, "
                    "timestamp, success, msg, abs_err, rel_err, "
                    "solver_inputs, solver_output, solver_residuals) "
                    "VALUES(?,?,?,?,?,?,?,?,?,?)",
                    (self._counter, self._iteration_coordinate,
                     metadata['timestamp'], metadata['success'],
                     metadata['msg'], abs, rel, inputs_blob, outputs_blob,
                     residuals_blob))

                c.execute(
                    "INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                    ('solver', c.lastrowid))
示例#9
0
    def record_iteration_system(self, recording_requester, data, metadata):
        """
        Record data and metadata from a System.

        Parameters
        ----------
        recording_requester : System
            System in need of recording.
        data : dict
            Dictionary containing inputs, outputs, and residuals.
        metadata : dict
            Dictionary containing execution metadata.
        """
        if self.con:
            inputs = data['i']
            outputs = data['o']
            residuals = data['r']

            inputs_array = values_to_array(inputs)
            outputs_array = values_to_array(outputs)
            residuals_array = values_to_array(residuals)

            inputs_blob = array_to_blob(inputs_array)
            outputs_blob = array_to_blob(outputs_array)
            residuals_blob = array_to_blob(residuals_array)

            with self.con:
                self.cursor.execute(
                    "INSERT INTO system_iterations(counter, iteration_coordinate, "
                    "timestamp, success, msg, inputs , outputs , residuals ) "
                    "VALUES(?,?,?,?,?,?,?,?)",
                    (self._counter, self._iteration_coordinate,
                     metadata['timestamp'], metadata['success'],
                     metadata['msg'], inputs_blob, outputs_blob,
                     residuals_blob))

                self.cursor.execute(
                    "INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                    ('system', self.cursor.lastrowid))
示例#10
0
    def record_iteration_solver(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Solver.

        Parameters
        ----------
        recording_requester : Solver
            Solver in need of recording.
        data : dict
            Dictionary containing outputs, residuals, and errors.
        metadata : dict
            Dictionary containing execution metadata.
        """
        abs = data['abs']
        rel = data['rel']
        outputs = data['o']
        residuals = data['r']

        outputs_array = values_to_array(outputs)
        residuals_array = values_to_array(residuals)

        outputs_blob = array_to_blob(outputs_array)
        residuals_blob = array_to_blob(residuals_array)

        with self.con:
            self.cursor.execute("INSERT INTO solver_iterations(counter, iteration_coordinate, "
                                "timestamp, success, msg, abs_err, rel_err, solver_output, "
                                "solver_residuals) VALUES(?,?,?,?,?,?,?,?,?)",
                                (self._counter, self._iteration_coordinate,
                                 metadata['timestamp'],
                                 metadata['success'], metadata['msg'],
                                 abs, rel,
                                 outputs_blob, residuals_blob))

            self.cursor.execute("INSERT INTO global_iterations(record_type, rowid) VALUES(?,?)",
                                ('solver', self.cursor.lastrowid))
示例#11
0
    def record_iteration_driver(self, recording_requester, data, metadata):
        """
        Record data and metadata from a Driver.

        Parameters
        ----------
        recording_requester : object
            Driver in need of recording.
        data : dict
            Dictionary containing desvars, objectives, constraints, responses, and System vars.
        metadata : dict
            Dictionary containing execution metadata.
        """
        input_, output = [values_to_array(data[n]) for n in ['in', 'out']]
        self.global_iterations.append(
            ('driver', len(output), str(recording_requester)))
        meta_fields = [('counter', self._counter),
                       ('iteration_coordinate', self._iteration_coordinate),
                       ('timestamp', metadata['timestamp']),
                       ('success', metadata['success']),
                       ('msg', metadata['msg'])]

        data_fields = [(abs2prom[n], v) for struct_arr, abs2prom in [(
            input_[0],
            self._abs2prom['input']), (output[0], self._abs2prom['output'])]
                       for n, v in zip(struct_arr.dtype.names, struct_arr)]

        # first time -> create lists
        if len(self.iteration_coordinate_lst) == 0:
            for k, _ in meta_fields + data_fields:
                self.driver_iteration_dict[k] = []
            self.dtypes = [input_.dtype, output.dtype]

        self.iteration_coordinate_lst.append(self._iteration_coordinate)
        for k, v in meta_fields:
            self.driver_iteration_dict[k].append(v)
        N = len(self.iteration_coordinate_lst)
        for k, v in data_fields:
            lst = self.driver_iteration_dict[k]
            if len(lst) < N:
                lst.append(v)
            else:
                #  # may be different due to scaling
                #  # we hope the first is the right one
                #  assert np.all(lst[-1] == v)
                pass