1111
1212import markov_builder .example_models as example_models
1313
14+ from markov_builder .rate_expressions import negative_rate_expr , positive_rate_expr
15+
1416
1517class TestMarkovChain (unittest .TestCase ):
1618
@@ -55,10 +57,13 @@ def test_transition_matrix(self):
5557 nx .drawing .nx_agraph .write_dot (mc .graph , "Beattie_dotfile.dot" )
5658
5759 # Draw graph using pyvis
60+ mc .draw_graph (os .path .join (self .output_dir , "BeattieModel.html" ), show_options = True )
5861 mc .draw_graph (os .path .join (self .output_dir , "BeattieModel.html" ))
5962 logging .debug (mc .graph )
6063
64+ labels , Q = mc .get_transition_matrix (use_parameters = True )
6165 labels , Q = mc .get_transition_matrix ()
66+
6267 logging .debug ("Q^T matrix is {}, labels are {}" .format (Q .T , labels ))
6368
6469 system = mc .eliminate_state_from_transition_matrix (['C' , 'O' , 'I' ])
@@ -84,7 +89,23 @@ def test_construct_examples(self):
8489 nx .drawing .nx_agraph .write_dot (mc .graph , "%s_dotfile.dot" % name )
8590 nx .drawing .nx_agraph .write_dot (mc .graph , "%s_dotfile.dot" % name )
8691
87- def test_parameterise_rates (self ):
92+ def test_parameterise_rates_no_default (self ):
93+ """Test parameterise rates using a dictionary with no default parameter values.
94+
95+ Using the Beattie model
96+ """
97+
98+ mc = example_models .construct_four_state_chain ()
99+
100+ rate_dictionary = {'k_1' : positive_rate_expr ,
101+ 'k_2' : negative_rate_expr ,
102+ 'k_3' : positive_rate_expr ,
103+ 'k_4' : negative_rate_expr ,
104+ }
105+
106+ mc .parameterise_rates (rate_dictionary , shared_variables = ('V' ,))
107+
108+ def test_myokit_output (self ):
88109 """
89110 Test the MarkovChain.parameterise_rates function.
90111 """
@@ -109,7 +130,11 @@ def test_parameterise_rates(self):
109130 self .assertEqual (param_list .count ('V' ), 1 )
110131
111132 # Generate myokit code
133+ myokit_model = mc .generate_myokit_model (eliminate_state = 'O' )
112134 myokit_model = mc .generate_myokit_model ()
135+ myokit_model = mc .generate_myokit_model (drug_binding = True )
136+ myokit_model = mc .generate_myokit_model (drug_binding = True , eliminate_state = 'O' )
137+
113138 myokit .save (os .path .join (self .output_dir , 'beattie_model.mmt' ), myokit_model )
114139
115140 # Eliminate last node
@@ -214,6 +239,7 @@ def test_latex_printing(self):
214239 for mc in models :
215240 logging .debug (f"Printing latex for { mc .name } " )
216241 logging .debug (mc .as_latex ())
242+ logging .debug (mc .as_latex (label_order = mc .get_states ()))
217243 logging .debug (mc .as_latex (state_to_remove = 'O' ))
218244 logging .debug (mc .as_latex (include_auxiliary_expression = True ))
219245 logging .debug (mc .as_latex ('O' , True ))
@@ -232,9 +258,13 @@ def test_sample_trajectories(self):
232258 param_dict = mc .default_values
233259 param_dict ['V' ] = 0
234260
261+ self .assertRaises (TypeError , mc .get_equilibrium_distribution )
262+
235263 labels , eqm_dist = mc .get_equilibrium_distribution (param_dict = param_dict )
236264 starting_distribution = [int (val ) for val in n_samples * eqm_dist ]
237265
266+ df = mc .sample_trajectories (n_samples , (0 , 10 ))
267+
238268 df = mc .sample_trajectories (n_samples , (0 , 250 ), param_dict = param_dict ,
239269 starting_distribution = starting_distribution )
240270 df = df .set_index ('time' )
0 commit comments