def update_abstract_code(self, run_namespace): # Update the not_refractory variable for the refractory period mechanism self.abstract_code = self._get_refractory_code(run_namespace=run_namespace) # Get the names used in the refractory code _, used_known, unknown = analyse_identifiers(self.abstract_code, self.group.variables, recursive=True) # Get all names used in the equations (and always get "dt") names = self.group.equations.names external_names = self.group.equations.identifiers | {'dt'} variables = self.group.resolve_all(used_known | unknown | names | external_names, run_namespace, # we don't need to raise any warnings # for the user here, warnings will # be raised in create_runner_codeobj user_identifiers=set()) if len(self.group.equations.diff_eq_names) > 0: self.abstract_code += StateUpdateMethod.apply_stateupdater(self.group.equations, variables, self.method_choice, group_name=self.group.name) user_code = '\n'.join(['{var} = {expr}'.format(var=var, expr=expr) for var, expr in self.group.equations.get_substituted_expressions(variables)]) self.user_code = user_code
def update_abstract_code(self, run_namespace): # Update the not_refractory variable for the refractory period mechanism self.abstract_code = self._get_refractory_code(run_namespace=run_namespace) # Get the names used in the refractory code _, used_known, unknown = analyse_identifiers(self.abstract_code, self.group.variables, recursive=True) # Get all names used in the equations (and always get "dt") names = self.group.equations.names external_names = self.group.equations.identifiers | {'dt'} variables = self.group.resolve_all(used_known | unknown | names | external_names, # we don't need to raise any warnings # for the user here, warnings will # be raised in create_runner_codeobj set(), run_namespace=run_namespace) self.abstract_code += StateUpdateMethod.apply_stateupdater(self.group.equations, variables, self.method_choice) user_code = '\n'.join(['{var} = {expr}'.format(var=var, expr=expr) for var, expr in self.group.equations.substituted_expressions]) self.user_code = user_code
def update_abstract_code(self, run_namespace): # Update the not_refractory variable for the refractory period mechanism self.abstract_code = self._get_refractory_code( run_namespace=run_namespace) # Get the names used in the refractory code _, used_known, unknown = analyse_identifiers(self.abstract_code, self.group.variables, recursive=True) # Get all names used in the equations (and always get "dt") names = self.group.equations.names external_names = self.group.equations.identifiers | {'dt'} variables = self.group.resolve_all( used_known | unknown | names | external_names, run_namespace, # we don't need to raise any warnings # for the user here, warnings will # be raised in create_runner_codeobj user_identifiers=set()) if len(self.group.equations.diff_eq_names) > 0: stateupdate_output = StateUpdateMethod.apply_stateupdater( self.group.equations, variables, self.method_choice, method_options=self.method_options, group_name=self.group.name) if isinstance(stateupdate_output, basestring): self.abstract_code += stateupdate_output else: # Note that the reason to send self along with this method is so the StateUpdater # can be modified! i.e. in GSL StateUpdateMethod a custom CodeObject gets added # to the StateUpdater together with some auxiliary information self.abstract_code += stateupdate_output(self) user_code = '\n'.join([ '{var} = {expr}'.format(var=var, expr=expr) for var, expr in self.group.equations.get_substituted_expressions(variables) ]) self.user_code = user_code
def update_abstract_code(self, run_namespace): # Update the not_refractory variable for the refractory period mechanism self.abstract_code = self._get_refractory_code(run_namespace=run_namespace) # Get the names used in the refractory code _, used_known, unknown = analyse_identifiers(self.abstract_code, self.group.variables, recursive=True) # Get all names used in the equations (and always get "dt") names = self.group.equations.names external_names = self.group.equations.identifiers | {'dt'} variables = self.group.resolve_all(used_known | unknown | names | external_names, run_namespace, # we don't need to raise any warnings # for the user here, warnings will # be raised in create_runner_codeobj user_identifiers=set()) if len(self.group.equations.diff_eq_names) > 0: stateupdate_output = StateUpdateMethod.apply_stateupdater(self.group.equations, variables, self.method_choice, method_options=self.method_options, group_name=self.group.name) if isinstance(stateupdate_output, basestring): self.abstract_code += stateupdate_output else: # Note that the reason to send self along with this method is so the StateUpdater # can be modified! i.e. in GSL StateUpdateMethod a custom CodeObject gets added # to the StateUpdater together with some auxiliary information self.abstract_code += stateupdate_output(self) user_code = '\n'.join(['{var} = {expr}'.format(var=var, expr=expr) for var, expr in self.group.equations.get_substituted_expressions(variables)]) self.user_code = user_code