2790 """Translate the file given on the command line.""" 2793 DEBUG(
'translate',
"+++ Loaded model")
2795 config = ConfigurationStore(doc, options=options)
2796 for config_file
in options.config_file:
2797 config.read_configuration_file(config_file)
2798 DEBUG(
'translate',
"+++ Read config")
2801 if options.protocol:
2803 protocol.apply_protocol_file(doc, options.protocol)
2805 post_proto_cellml = options.outfilename
or model_file
2806 post_proto_cellml = os.path.splitext(post_proto_cellml)[0] +
'-proto.cellml.ppp' 2808 doc.xml(indent=
u'yes', stream=stream)
2810 DEBUG(
'translate',
"+++ Applied protocol")
2812 config.finalize_config()
2813 DEBUG(
'translate',
"+++ Processed config")
2815 solver_info = SolverInfo(doc.model)
2818 translator_klass = CellMLTranslator.translators[options.translate_type]
2819 if not options.protocol:
2820 translator_klass.generate_interface(doc, solver_info)
2821 config.validate_metadata(options.assume_valid)
2822 DEBUG(
'translate',
"+++ Generated interface")
2825 config.find_lookup_variables()
2826 DEBUG(
'translate',
"+++ Found LT keys")
2831 config.annotate_currents_for_pe()
2833 config.annotate_metadata_for_pe()
2834 DEBUG(
'translate',
"+++ Annotated variables")
2836 config.expose_variables()
2838 class_name = options.class_name
2840 class_name = doc.model.name.replace(
'-',
'_')
2841 if options.augment_class_name:
2842 class_name =
u'CML_' + class_name
2846 class_name +=
'_lut' 2847 if options.backward_euler:
2849 if options.use_modifiers:
2850 class_name +=
'_sens' 2851 if options.protocol:
2853 class_name +=
"_Proto_" + os.path.splitext(os.path.basename(options.protocol))[0]
2855 output_filename = getattr(options,
'outfilename',
None)
2856 if not options.translate
and not output_filename:
2857 output_filename =
'stdout' 2859 if options.units_conversions:
2860 doc.model.add_units_conversions()
2861 DEBUG(
'translate',
"+++ Added units conversions")
2863 if options.do_jacobian_analysis:
2864 lin = optimize.LinearityAnalyser()
2865 lin.analyse_for_jacobian(doc, V=config.V_variable)
2866 DEBUG(
'translate',
"+++ Analysed model for Jacobian")
2868 if options.maple_output:
2870 from maple_parser
import MapleParser
2872 jacobian_file = file(options.maple_output)
2873 doc.model._cml_jacobian = mp.parse(jacobian_file)
2874 doc.model._cml_jacobian_full = mp.JacobianWasFullSize
2875 jacobian_file.close()
2876 if not options.backward_euler
and doc.model._cml_jacobian_full:
2878 solver_info.add_jacobian_matrix()
2879 solver_info.add_variable_links()
2881 if options.backward_euler:
2883 lin = optimize.LinearityAnalyser()
2884 lin.analyse_for_jacobian(doc, V=config.V_variable)
2885 lin.rearrange_linear_odes(doc)
2887 jacobian = doc.model._cml_jacobian
2888 if isinstance(jacobian, tuple):
2889 assert doc.model._cml_jacobian_full
2890 jacobian = jacobian[1]
2891 nonlinear_vars = set([v.get_source_variable(recurse=
True)
for v
in doc.model._cml_nonlinear_system_variables])
2893 return cellml_variable.get_variable_object(doc.model, vname).get_source_variable(recurse=
True)
2894 for var_i, var_j
in jacobian.keys():
2895 if gv(var_i)
not in nonlinear_vars
or gv(var_j)
not in nonlinear_vars:
2896 del jacobian[(var_i, var_j)]
2897 if doc.model._cml_jacobian_full:
2900 for key, expr
in jacobian.iteritems():
2902 if key[0] == key[1]:
2904 new_expr = maple_parser.MNumber([
'1'])
2905 if not (isinstance(expr, maple_parser.MNumber)
and str(expr) ==
'0'):
2909 args.append(new_expr)
2910 args.append(maple_parser.MOperator([maple_parser.MVariable([
'delta_t']), expr],
'prod',
'times'))
2911 new_expr = maple_parser.MOperator(args,
'',
'minus')
2913 jacobian[key] = new_expr
2915 solver_info.add_all_info()
2917 solver_info.add_variable_links()
2918 solver_info.add_linear_ode_update_equations()
2919 DEBUG(
'translate',
"+++ Parsed and incorporated Maple output")
2921 options.include_dt_in_tables =
False 2925 lut = optimize.LookupTableAnalyser()
2931 pe = optimize.PartialEvaluator()
2932 pe.parteval(doc, solver_info, lut)
2933 DEBUG(
'translate',
"+++ Done PE")
2937 lut.analyse_model(doc, solver_info)
2938 DEBUG(
'translate',
"+++ Done LT analysis")
2940 if options.rush_larsen:
2941 rl = optimize.RushLarsenAnalyser()
2942 rl.analyse_model(doc)
2943 DEBUG(
'translate',
"+++ Done Rush-Larsen analysis")
2945 if options.translate:
2947 initargs = {
'add_timestamp':
not options.no_timestamp,
2949 transargs = {
'v_variable': config.V_variable}
2950 transargs[
'row_lookup_method'] = options.row_lookup_method
2951 transargs[
'lt_index_uses_floor'] = options.lt_index_uses_floor
2952 transargs[
'constrain_table_indices'] = options.constrain_table_indices
2953 """if issubclass(translator_klass, CellMLToMapleTranslator): 2954 initargs['omit_constants'] = options.omit_constants 2955 initargs['compute_full_jacobian'] = options.compute_full_jacobian 2957 from CellMLToNektarTranslator
import CellMLToNektarTranslator
2958 if issubclass(translator_klass, CellMLToNektarTranslator):
2959 solver_info.add_membrane_ionic_current()
2960 transargs[
'use_chaste_stimulus'] = options.use_chaste_stimulus
2961 transargs[
'separate_lut_class'] = options.separate_lut_class
2962 transargs[
'convert_interfaces'] = options.convert_interfaces
2963 transargs[
'use_modifiers'] = options.use_modifiers
2964 transargs[
'use_data_clamp'] = options.use_data_clamp
2965 transargs[
'dynamically_loadable'] = options.dynamically_loadable
2966 transargs[
'use_protocol'] = bool(options.protocol)
2967 t = translator_klass(**initargs)
2968 t.translate(doc, model_file, output_filename, class_name=class_name, **transargs)
2969 cellml_metadata.remove_model(doc.model)
2972 comment = pycml.comment_base(
2974 doc.xml_insert_before(doc.model, comment)
2977 doc.xml(indent=
u'yes', stream=stream)
2981 DEBUG(
'translate',
"+++ Done translation")
2982
def get_options(args)
For running as an executable #.
def open_output_stream(fname)
def version_comment(note_time=True)
def close_output_stream(stream)
def load_model(model_file, options)
def DEBUG(facility, args)