Exemple #1
0
    def _get_metadata_system(self, system):
        # Cannot handle PETScVector yet
        from openmdao.api import PETScVector
        if PETScVector and isinstance(system._outputs, PETScVector):
            return None, None  # Cannot handle PETScVector yet

        # collect scaling arrays
        scaling_vecs = {}
        for kind, odict in system._vectors.items():
            scaling_vecs[kind] = scaling = {}
            for vecname, vec in odict.items():
                scaling[vecname] = vec._scaling

        # create a copy of the system's metadata excluding what is in 'options_excludes'
        excludes = system.recording_options['options_excludes']

        if excludes:
            user_options = OptionsDictionary()
            user_options._all_recordable = system.options._all_recordable
            for key in system.options._dict:
                if check_path(key, [], excludes, True):
                    user_options._dict[key] = system.options._dict[key]
            user_options._read_only = system.options._read_only

            return scaling_vecs, user_options
        else:
            return scaling_vecs, system.options
Exemple #2
0
    def record_metadata_system(self, recording_requester):
        """
        Record system metadata.

        Parameters
        ----------
        recording_requester : System
            The System that would like to record its metadata.
        """
        if self.connection:
            # Cannot handle PETScVector yet
            from openmdao.api import PETScVector
            if PETScVector and isinstance(recording_requester._outputs,
                                          PETScVector):
                return  # Cannot handle PETScVector yet

            # collect scaling arrays
            scaling_vecs = {}
            for kind, odict in iteritems(recording_requester._vectors):
                scaling_vecs[kind] = scaling = {}
                for vecname, vec in iteritems(odict):
                    scaling[vecname] = vec._scaling
            scaling_factors = pickle.dumps(scaling_vecs, self._pickle_version)

            # create a copy of the system's metadata excluding what is in 'options_excludes'
            user_options = OptionsDictionary()
            excludes = recording_requester.recording_options[
                'options_excludes']
            for key in recording_requester.options._dict:
                if check_path(key, [], excludes, True):
                    user_options._dict[
                        key] = recording_requester.options._dict[key]
            user_options._read_only = recording_requester.options._read_only

            # try to pickle the metadata, report if it failed
            try:
                pickled_metadata = pickle.dumps(user_options,
                                                self._pickle_version)
            except Exception:
                pickled_metadata = pickle.dumps(OptionsDictionary(),
                                                self._pickle_version)
                warnings.warn(
                    "Trying to record options which cannot be pickled "
                    "on system with name: %s. Use the 'options_excludes' "
                    "recording option on system objects to avoid attempting "
                    "to record options which cannot be pickled. Skipping "
                    "recording options for this system." %
                    recording_requester.name, RuntimeWarning)

            path = recording_requester.pathname
            if not path:
                path = 'root'

            scaling_factors = sqlite3.Binary(scaling_factors)
            pickled_metadata = sqlite3.Binary(pickled_metadata)

            with self.connection as c:
                c.execute(
                    "INSERT INTO system_metadata(id, scaling_factors, component_metadata) "
                    "VALUES(?,?,?)", (path, scaling_factors, pickled_metadata))
    def record_metadata_system(self, recording_requester):
        """
        Record system metadata.

        Parameters
        ----------
        recording_requester : System
            The System that would like to record its metadata.
        """
        if self.con:
            # Cannot handle PETScVector yet
            from openmdao.api import PETScVector
            if PETScVector and isinstance(recording_requester._outputs,
                                          PETScVector):
                return  # Cannot handle PETScVector yet

            # collect scaling arrays
            scaling_vecs = {}
            for kind, odict in iteritems(recording_requester._vectors):
                scaling_vecs[kind] = scaling = {}
                for vecname, vec in iteritems(odict):
                    scaling[vecname] = vec._scaling
            scaling_factors = pickle.dumps(scaling_vecs, self._pickle_version)

            # create a copy of the system's metadata excluding what is in 'metadata_excludes'
            user_metadata = OptionsDictionary()
            excludes = recording_requester.recording_options[
                'metadata_excludes']
            for key in recording_requester.options._dict:
                if check_path(key, [], excludes, True):
                    user_metadata._dict[
                        key] = recording_requester.options._dict[key]
            user_metadata._read_only = recording_requester.options._read_only
            pickled_metadata = pickle.dumps(user_metadata,
                                            self._pickle_version)

            path = recording_requester.pathname
            if not path:
                path = 'root'

            with self.con:
                self.con.execute(
                    "INSERT INTO system_metadata(id, scaling_factors, component_metadata) \
                                  VALUES(?,?, ?)",
                    (path, sqlite3.Binary(scaling_factors),
                     sqlite3.Binary(pickled_metadata)))
Exemple #4
0
    def _get_metadata_system(self, recording_requester):
        # Cannot handle PETScVector yet
        from openmdao.api import PETScVector
        if PETScVector and isinstance(recording_requester._outputs, PETScVector):
            return None, None  # Cannot handle PETScVector yet

        # collect scaling arrays
        scaling_vecs = {}
        for kind, odict in iteritems(recording_requester._vectors):
            scaling_vecs[kind] = scaling = {}
            for vecname, vec in iteritems(odict):
                scaling[vecname] = vec._scaling

        # create a copy of the system's metadata excluding what is in 'options_excludes'
        user_options = OptionsDictionary()
        excludes = recording_requester.recording_options['options_excludes']
        for key in recording_requester.options._dict:
            if check_path(key, [], excludes, True):
                user_options._dict[key] = recording_requester.options._dict[key]
        user_options._read_only = recording_requester.options._read_only

        return scaling_vecs, user_options
    def _get_metadata_system(self, recording_requester):
        # Cannot handle PETScVector yet
        from openmdao.api import PETScVector
        if PETScVector and isinstance(recording_requester._outputs,
                                      PETScVector):
            return None, None  # Cannot handle PETScVector yet

        # collect scaling arrays
        scaling_vecs = {}
        for kind, odict in iteritems(recording_requester._vectors):
            scaling_vecs[kind] = scaling = {}
            for vecname, vec in iteritems(odict):
                scaling[vecname] = vec._scaling

        # create a copy of the system's metadata excluding what is in 'options_excludes'
        user_options = OptionsDictionary()
        excludes = recording_requester.recording_options['options_excludes']
        for key in recording_requester.options._dict:
            if check_path(key, [], excludes, True):
                user_options._dict[key] = recording_requester.options._dict[
                    key]
        user_options._read_only = recording_requester.options._read_only

        return scaling_vecs, user_options