示例#1
0
def dynamic_function_from_file(obj, filename):
    """
    Load a dynamic function from a file and attach it to the obj. (A Network
    or Trajectory.)
    
    The filename must be <function_name>.py
    """
    f = file(filename, 'r')
    function_body = f.read()
    f.close()

    basename = os.path.basename(filename)
    func = os.path.splitext(basename)[0]
    file_type = os.path.splitext(basename)[1][1:]

    if isinstance(obj, Trajectory_mod.Trajectory):
        setattr(obj, '%s_functionBody' % func, function_body)
        # We try to get the attribute 'namespace' for the object.
        Network_mod._exec_dynamic_func(obj, func,
                                       getattr(obj, 'namespace', {}))
    elif isinstance(obj, Network_mod.Network):
        if file_type == 'py':
            obj._dynamic_funcs_python[func] = function_body
            obj.exec_dynamic_functions(disable_c=True)
        elif file_type == 'c':
            obj.exec_dynamic_functions(curr_c_code=function_body)
示例#2
0
def dynamic_function_from_file(obj, filename):
    """
    Load a dynamic function from a file and attach it to the obj. (A Network
    or Trajectory.)
    
    The filename must be <function_name>.py
    """
    f = file(filename, 'r')
    function_body = f.read()
    f.close()

    basename = os.path.basename(filename)
    func = os.path.splitext(basename)[0]
    file_type = os.path.splitext(basename)[1][1:]

    if isinstance(obj, Trajectory_mod.Trajectory):
        setattr(obj, '%s_functionBody' % func, function_body)
        # We try to get the attribute 'namespace' for the object.
        Network_mod._exec_dynamic_func(obj, func, getattr(obj, 'namespace', {}))
    elif isinstance(obj, Network_mod.Network):
        if file_type == 'py':
            obj._dynamic_funcs_python[func] = function_body
            obj.exec_dynamic_functions(disable_c = True)
        elif file_type == 'c':
            obj.exec_dynamic_functions(curr_c_code = function_body)
示例#3
0
    def appendSensFromODEINT(self, timepoints, odeint_array, holds_dt=False):
        if getattr(self, '_assignment', None) is None:
            Network_mod._exec_dynamic_func(self,
                                           '_assignment',
                                           self.namespace,
                                           bind=False)

        if getattr(self, '_sens_assignment', None) is None:
            Network_mod._exec_dynamic_func(self,
                                           '_sens_assignment',
                                           self.namespace,
                                           bind=False)

        numAdded = odeint_array.shape[0]
        addedValues = scipy.zeros((numAdded, len(self.key_column)),
                                  scipy.float_)

        self.values = scipy.concatenate((self.values, addedValues))
        self.timepoints = scipy.concatenate((self.timepoints, timepoints))

        nDv = len(self.dynamicVarKeys)
        nOv = len(self.optimizableVarKeys)

        # fill in trajectory
        for ii, dvId in enumerate(self.dynamicVarKeys):
            self.values[-numAdded:, self.key_column.get(dvId)] = \
                    odeint_array[:, ii]
        # ... and sensitivities
        for ii, dvId in enumerate(self.dynamicVarKeys):
            for jj, ovId in enumerate(self.optimizableVarKeys):
                self.values[-numAdded:,
                            self.key_column.get((dvId, ovId))]\
                        = odeint_array[:, ii + (jj+1)*nDv]

        self._assignment(self.values, self.timepoints, -numAdded, None)
        self._sens_assignment(self.values, self.timepoints, -numAdded, None)

        if holds_dt:
            # fill in the time derivative of the trajectory
            for ii, dvId in enumerate(self.dynamicVarKeys):
                self.values[-numAdded:, self.key_column.get((dvId,'time'))] = \
                    odeint_array[:, ii + nDv*(nOv+1)]
        # ... and of the sensitivities
            for ii, dvId in enumerate(self.dynamicVarKeys):
                for jj, ovId in enumerate(self.optimizableVarKeys):
                    self.values[-numAdded:,
                            self.key_column.get((dvId, ovId,'time'))]\
                        = odeint_array[:, ii + (jj+1)*nDv + nDv*(nOv+1)]
    def appendSensFromODEINT(self, timepoints, odeint_array, holds_dt = False):
        if getattr(self, '_assignment', None) is None:
            Network_mod._exec_dynamic_func(self, '_assignment',
                                           self.namespace, bind=False)

        if getattr(self, '_sens_assignment', None) is None:
            Network_mod._exec_dynamic_func(self, '_sens_assignment',
                                           self.namespace, bind=False)

        numAdded = odeint_array.shape[0]
        addedValues = scipy.zeros((numAdded, len(self.key_column)),
                                  scipy.float_)

        self.values = scipy.concatenate((self.values, addedValues))
        self.timepoints = scipy.concatenate((self.timepoints, timepoints))

        nDv = len(self.dynamicVarKeys)
        nOv = len(self.optimizableVarKeys)

        # fill in trajectory
        for ii, dvId in enumerate(self.dynamicVarKeys):
            self.values[-numAdded:, self.key_column.get(dvId)] = \
                    odeint_array[:, ii]
        # ... and sensitivities
        for ii, dvId in enumerate(self.dynamicVarKeys):
            for jj, ovId in enumerate(self.optimizableVarKeys):
                self.values[-numAdded:,
                            self.key_column.get((dvId, ovId))]\
                        = odeint_array[:, ii + (jj+1)*nDv]

        self._assignment(self.values, self.timepoints, -numAdded, None)
        self._sens_assignment(self.values, self.timepoints, -numAdded, None)

        if holds_dt :
        # fill in the time derivative of the trajectory
            for ii, dvId in enumerate(self.dynamicVarKeys):
                self.values[-numAdded:, self.key_column.get((dvId,'time'))] = \
                    odeint_array[:, ii + nDv*(nOv+1)]
        # ... and of the sensitivities
            for ii, dvId in enumerate(self.dynamicVarKeys):
                for jj, ovId in enumerate(self.optimizableVarKeys):
                    self.values[-numAdded:,
                            self.key_column.get((dvId, ovId,'time'))]\
                        = odeint_array[:, ii + (jj+1)*nDv + nDv*(nOv+1)]
示例#5
0
    def appendFromODEINT(self, timepoints, odeint_array, holds_dt = False):
        if getattr(self, '_assignment', None) is None:
            Network_mod._exec_dynamic_func(self, '_assignment',
                                           self.namespace, bind=False)

        numAdded = odeint_array.shape[0]
        addedValues = scipy.zeros((numAdded, len(self.key_column)),
                                  scipy.float_)

        self.values = scipy.concatenate((self.values, addedValues))
        self.timepoints = scipy.concatenate((self.timepoints, timepoints))

        for ii, id in enumerate(self.dynamicVarKeys):
            self.values[-numAdded:, self.key_column.get(id)] =\
                    odeint_array[:, ii]

        self._assignment(self.values, self.timepoints, -numAdded, None)
        if holds_dt :
            for ii, id in enumerate(self.dynamicVarKeys) :
                self.values[-numAdded:, self.key_column.get((id,'time'))] = \
                    odeint_array[:,ii+len(self.dynamicVarKeys)]