myokit 1.33.9__py3-none-any.whl → 1.35.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. myokit/__init__.py +9 -36
  2. myokit/__main__.py +76 -142
  3. myokit/_aux.py +62 -16
  4. myokit/_bin/example.mmt +1 -2
  5. myokit/_bin/install-win/menu.json +7 -7
  6. myokit/_config.py +22 -31
  7. myokit/_datablock.py +30 -74
  8. myokit/_datalog.py +49 -72
  9. myokit/_err.py +25 -24
  10. myokit/_expressions.py +50 -68
  11. myokit/_io.py +15 -27
  12. myokit/_model_api.py +453 -249
  13. myokit/_myokit_version.py +1 -5
  14. myokit/_parsing.py +38 -44
  15. myokit/_progress.py +5 -8
  16. myokit/_protocol.py +99 -9
  17. myokit/_sim/__init__.py +7 -24
  18. myokit/_sim/cable.c +6 -8
  19. myokit/_sim/cable.py +6 -8
  20. myokit/_sim/cmodel.h +125 -70
  21. myokit/_sim/cmodel.py +12 -14
  22. myokit/_sim/compiler.py +1 -4
  23. myokit/_sim/cvodessim.c +196 -118
  24. myokit/_sim/cvodessim.py +130 -103
  25. myokit/_sim/differential.hpp +4 -4
  26. myokit/_sim/fiber_tissue.c +4 -8
  27. myokit/_sim/fiber_tissue.py +11 -13
  28. myokit/_sim/jacobian.cpp +2 -2
  29. myokit/_sim/jacobian.py +11 -8
  30. myokit/_sim/mcl.h +53 -55
  31. myokit/_sim/opencl.py +21 -27
  32. myokit/_sim/openclsim.c +3 -7
  33. myokit/_sim/openclsim.cl +3 -3
  34. myokit/_sim/openclsim.py +49 -40
  35. myokit/_sim/pacing.h +36 -16
  36. myokit/_sim/rhs.c +6 -13
  37. myokit/_sim/rhs.py +5 -14
  38. myokit/_sim/sundials.py +1 -4
  39. myokit/_system.py +10 -16
  40. myokit/_unit.py +4 -13
  41. myokit/float.py +0 -3
  42. myokit/formats/__init__.py +8 -10
  43. myokit/formats/ansic/__init__.py +0 -3
  44. myokit/formats/ansic/_ewriter.py +2 -4
  45. myokit/formats/ansic/_exporter.py +1 -4
  46. myokit/formats/ansic/template/cable.c +4 -4
  47. myokit/formats/ansic/template/euler.c +5 -5
  48. myokit/formats/ansic/template/sim.c +6 -6
  49. myokit/formats/axon/__init__.py +1 -3
  50. myokit/formats/axon/_abf.py +12 -17
  51. myokit/formats/axon/_atf.py +5 -6
  52. myokit/formats/axon/_importer.py +0 -3
  53. myokit/formats/cellml/__init__.py +0 -3
  54. myokit/formats/cellml/_ewriter.py +3 -6
  55. myokit/formats/cellml/_exporter.py +3 -6
  56. myokit/formats/cellml/_importer.py +1 -4
  57. myokit/formats/cellml/v1/__init__.py +0 -4
  58. myokit/formats/cellml/v1/_api.py +8 -11
  59. myokit/formats/cellml/v1/_parser.py +2 -5
  60. myokit/formats/cellml/v1/_writer.py +2 -11
  61. myokit/formats/cellml/v2/__init__.py +0 -3
  62. myokit/formats/cellml/v2/_api.py +8 -17
  63. myokit/formats/cellml/v2/_parser.py +2 -5
  64. myokit/formats/cellml/v2/_writer.py +1 -4
  65. myokit/formats/channelml/__init__.py +0 -3
  66. myokit/formats/channelml/_importer.py +11 -21
  67. myokit/formats/cpp/__init__.py +1 -3
  68. myokit/formats/cpp/_ewriter.py +0 -3
  69. myokit/formats/cuda/__init__.py +0 -3
  70. myokit/formats/cuda/_ewriter.py +2 -4
  71. myokit/formats/cuda/_exporter.py +0 -3
  72. myokit/formats/cuda/template/kernel.cu +8 -5
  73. myokit/formats/easyml/__init__.py +0 -3
  74. myokit/formats/easyml/_ewriter.py +9 -11
  75. myokit/formats/easyml/_exporter.py +2 -5
  76. myokit/formats/html/__init__.py +0 -3
  77. myokit/formats/html/_exporter.py +0 -3
  78. myokit/formats/html/_flatten.py +5 -21
  79. myokit/formats/latex/__init__.py +0 -3
  80. myokit/formats/latex/_ewriter.py +1 -4
  81. myokit/formats/latex/_exporter.py +4 -6
  82. myokit/formats/mathml/__init__.py +0 -3
  83. myokit/formats/mathml/_ewriter.py +2 -11
  84. myokit/formats/mathml/_parser.py +4 -6
  85. myokit/formats/matlab/__init__.py +0 -3
  86. myokit/formats/matlab/_ewriter.py +1 -4
  87. myokit/formats/matlab/_exporter.py +2 -5
  88. myokit/formats/matlab/template/main.m +3 -2
  89. myokit/formats/opencl/__init__.py +0 -3
  90. myokit/formats/opencl/_ewriter.py +2 -4
  91. myokit/formats/opencl/_exporter.py +2 -5
  92. myokit/formats/opencl/template/cable.c +10 -10
  93. myokit/formats/opencl/template/kernel.cl +1 -1
  94. myokit/formats/opencl/template/minilog.py +1 -1
  95. myokit/formats/python/__init__.py +0 -3
  96. myokit/formats/python/_ewriter.py +2 -5
  97. myokit/formats/python/_exporter.py +0 -3
  98. myokit/formats/python/template/sim.py +14 -14
  99. myokit/formats/sbml/__init__.py +0 -3
  100. myokit/formats/sbml/_api.py +50 -44
  101. myokit/formats/sbml/_importer.py +1 -4
  102. myokit/formats/sbml/_parser.py +2 -5
  103. myokit/formats/stan/__init__.py +0 -3
  104. myokit/formats/stan/_ewriter.py +2 -4
  105. myokit/formats/stan/_exporter.py +2 -5
  106. myokit/formats/stan/template/cell.stan +3 -3
  107. myokit/formats/sympy/__init__.py +0 -3
  108. myokit/formats/sympy/_ereader.py +1 -4
  109. myokit/formats/sympy/_ewriter.py +2 -5
  110. myokit/formats/wcp/__init__.py +0 -3
  111. myokit/formats/wcp/_wcp.py +2 -8
  112. myokit/formats/xml/__init__.py +0 -3
  113. myokit/formats/xml/_exporter.py +0 -3
  114. myokit/formats/xml/_split.py +0 -3
  115. myokit/gui/__init__.py +80 -246
  116. myokit/gui/datablock_viewer.py +103 -86
  117. myokit/gui/datalog_viewer.py +214 -66
  118. myokit/gui/explorer.py +15 -21
  119. myokit/gui/ide.py +171 -144
  120. myokit/gui/progress.py +9 -9
  121. myokit/gui/source.py +406 -375
  122. myokit/gui/vargrapher.py +2 -12
  123. myokit/lib/deps.py +12 -13
  124. myokit/lib/guess.py +3 -4
  125. myokit/lib/hh.py +20 -18
  126. myokit/lib/markov.py +21 -20
  127. myokit/lib/multi.py +1 -3
  128. myokit/lib/plots.py +20 -9
  129. myokit/pacing.py +0 -3
  130. myokit/pype.py +7 -18
  131. myokit/tests/__init__.py +3 -6
  132. myokit/tests/ansic_event_based_pacing.py +1 -4
  133. myokit/tests/ansic_fixed_form_pacing.py +3 -6
  134. myokit/tests/data/beeler-1977-model-compare-b.mmt +2 -2
  135. myokit/tests/data/clancy-1999-fitting.mmt +1 -0
  136. myokit/tests/test_aux.py +13 -28
  137. myokit/tests/test_cellml_v1_api.py +4 -19
  138. myokit/tests/test_cellml_v1_parser.py +0 -15
  139. myokit/tests/test_cellml_v1_writer.py +0 -9
  140. myokit/tests/test_cellml_v2_api.py +4 -19
  141. myokit/tests/test_cellml_v2_parser.py +0 -15
  142. myokit/tests/test_cellml_v2_writer.py +0 -9
  143. myokit/tests/test_cmodel.py +16 -22
  144. myokit/tests/test_compiler_detection.py +1 -11
  145. myokit/tests/test_component.py +108 -56
  146. myokit/tests/test_config.py +34 -67
  147. myokit/tests/test_datablock.py +1 -9
  148. myokit/tests/test_datalog.py +19 -24
  149. myokit/tests/test_dependency_checking.py +8 -23
  150. myokit/tests/test_expressions.py +0 -9
  151. myokit/tests/test_float.py +1 -5
  152. myokit/tests/test_formats.py +0 -9
  153. myokit/tests/test_formats_axon.py +1 -9
  154. myokit/tests/test_formats_cellml.py +0 -15
  155. myokit/tests/test_formats_channelml.py +0 -15
  156. myokit/tests/test_formats_easyml.py +0 -14
  157. myokit/tests/test_formats_exporters.py +1 -16
  158. myokit/tests/test_formats_expression_writers.py +1 -17
  159. myokit/tests/test_formats_html.py +0 -3
  160. myokit/tests/test_formats_importers.py +1 -16
  161. myokit/tests/test_formats_mathml_content.py +0 -9
  162. myokit/tests/test_formats_mathml_presentation.py +0 -9
  163. myokit/tests/test_formats_opencl.py +0 -10
  164. myokit/tests/test_formats_sbml.py +0 -15
  165. myokit/tests/test_formats_sympy.py +0 -9
  166. myokit/tests/test_formats_wcp.py +1 -3
  167. myokit/tests/test_io.py +27 -27
  168. myokit/tests/test_jacobian_calculator.py +6 -14
  169. myokit/tests/test_jacobian_tracer.py +0 -9
  170. myokit/tests/test_lib_deps.py +0 -9
  171. myokit/tests/test_lib_guess.py +0 -9
  172. myokit/tests/test_lib_hh.py +18 -12
  173. myokit/tests/test_lib_markov.py +21 -13
  174. myokit/tests/test_lib_multi.py +0 -9
  175. myokit/tests/test_lib_plots.py +13 -8
  176. myokit/tests/test_meta.py +0 -3
  177. myokit/tests/test_model.py +390 -96
  178. myokit/tests/test_model_building.py +44 -96
  179. myokit/tests/test_opencl_info.py +5 -14
  180. myokit/tests/test_pacing_factory.py +0 -3
  181. myokit/tests/test_pacing_system_c.py +1 -23
  182. myokit/tests/test_pacing_system_py.py +0 -9
  183. myokit/tests/test_parsing.py +139 -56
  184. myokit/tests/test_progress_reporters.py +0 -3
  185. myokit/tests/test_protocol.py +0 -9
  186. myokit/tests/test_protocol_floating_point.py +1 -10
  187. myokit/tests/test_protocol_time_series.py +82 -0
  188. myokit/tests/test_pype.py +0 -9
  189. myokit/tests/test_quantity.py +0 -9
  190. myokit/tests/test_rhs_benchmarker.py +1 -9
  191. myokit/tests/test_sbml_api.py +27 -42
  192. myokit/tests/test_sbml_parser.py +4 -19
  193. myokit/tests/test_simulation_1d.py +45 -25
  194. myokit/tests/test_simulation_cvodes.py +321 -55
  195. myokit/tests/test_simulation_cvodes_from_disk.py +0 -3
  196. myokit/tests/test_simulation_fiber_tissue.py +39 -12
  197. myokit/tests/test_simulation_log_interval.py +1 -431
  198. myokit/tests/test_simulation_opencl.py +69 -48
  199. myokit/tests/test_simulation_opencl_log_interval.py +1 -3
  200. myokit/tests/test_simulation_opencl_vs_cvode.py +1 -10
  201. myokit/tests/test_simulation_opencl_vs_sim1d.py +1 -10
  202. myokit/tests/test_system_info.py +1 -11
  203. myokit/tests/test_tools.py +0 -9
  204. myokit/tests/test_unit.py +1 -10
  205. myokit/tests/test_user_functions.py +0 -10
  206. myokit/tests/test_variable.py +231 -27
  207. myokit/tools.py +5 -21
  208. myokit/units.py +5 -3
  209. {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/METADATA +12 -15
  210. myokit-1.35.0.dist-info/RECORD +391 -0
  211. {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/WHEEL +1 -1
  212. {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/entry_points.txt +0 -1
  213. myokit/_exec_new.py +0 -15
  214. myokit/_exec_old.py +0 -15
  215. myokit/_sim/cvodesim.c +0 -1551
  216. myokit/_sim/cvodesim.py +0 -674
  217. myokit/_sim/icsim.cpp +0 -563
  218. myokit/_sim/icsim.py +0 -363
  219. myokit/_sim/psim.cpp +0 -656
  220. myokit/_sim/psim.py +0 -493
  221. myokit/lib/common.py +0 -1094
  222. myokit/tests/test_lib_common.py +0 -130
  223. myokit/tests/test_simulation_cvode.py +0 -612
  224. myokit/tests/test_simulation_ic.py +0 -108
  225. myokit/tests/test_simulation_p.py +0 -223
  226. myokit-1.33.9.dist-info/RECORD +0 -403
  227. /myokit/formats/opencl/template/{test → test.sh} +0 -0
  228. {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/LICENSE.txt +0 -0
  229. {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/top_level.txt +0 -0
@@ -5,20 +5,11 @@
5
5
  # This file is part of Myokit.
6
6
  # See http://myokit.org for copyright, sharing, and licensing details.
7
7
  #
8
- from __future__ import absolute_import, division
9
- from __future__ import print_function, unicode_literals
10
-
11
8
  import unittest
12
9
 
13
10
  import myokit
14
11
  import myokit.lib.guess as guess
15
12
 
16
- # Unit testing in Python 2 and 3
17
- try:
18
- unittest.TestCase.assertRaisesRegex
19
- except AttributeError:
20
- unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
21
-
22
13
 
23
14
  class LibGuessTest(unittest.TestCase):
24
15
  """
@@ -5,11 +5,9 @@
5
5
  # This file is part of Myokit.
6
6
  # See http://myokit.org for copyright, sharing, and licensing details.
7
7
  #
8
- from __future__ import absolute_import, division
9
- from __future__ import print_function, unicode_literals
10
-
11
8
  import os
12
9
  import unittest
10
+
13
11
  import numpy as np
14
12
 
15
13
  import myokit
@@ -17,12 +15,6 @@ import myokit.lib.hh as hh
17
15
 
18
16
  from myokit.tests import DIR_DATA
19
17
 
20
- # Unit testing in Python 2 and 3
21
- try:
22
- unittest.TestCase.assertRaisesRegex
23
- except AttributeError:
24
- unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
25
-
26
18
 
27
19
  MODEL = """
28
20
  [[model]]
@@ -365,13 +357,13 @@ class HHDetectionTest(unittest.TestCase):
365
357
  a = m2.get('ikr.a')
366
358
  rl = hh.get_rl_expression(a, myokit.Name(dt))
367
359
  a1 = rl.eval()
368
- a2 = a.state_value() + dt.eval() * a.rhs().eval()
360
+ a2 = a.initial_value(True) + dt.eval() * a.rhs().eval()
369
361
  self.assertAlmostEqual(a1, a2)
370
362
  # And for r
371
363
  r = m2.get('ikr.r')
372
364
  rl = hh.get_rl_expression(r, myokit.Name(dt))
373
365
  r1 = rl.eval()
374
- r2 = r.state_value() + dt.eval() * r.rhs().eval()
366
+ r2 = r.initial_value(True) + dt.eval() * r.rhs().eval()
375
367
  self.assertAlmostEqual(r1, r2)
376
368
 
377
369
  # Dt must be an expression
@@ -608,7 +600,7 @@ class HHModelTest(unittest.TestCase):
608
600
  # Test if derivatives are zero
609
601
  for k, x in enumerate(['ina.m', 'ina.h', 'ina.j']):
610
602
  x = model.get(x)
611
- x.set_state_value(ss[k])
603
+ x.set_initial_value(ss[k])
612
604
  self.assertAlmostEqual(x.eval(), 0)
613
605
 
614
606
  # Test arguments
@@ -645,6 +637,20 @@ class HHModelTest(unittest.TestCase):
645
637
 
646
638
  self.assertEqual(len(m.states()), 3)
647
639
 
640
+ def test_initial_value_conversion(self):
641
+ # Tests that initial value expressions are converted to floats
642
+
643
+ model = myokit.parse_model(MODEL)
644
+ model.get('ikr.a').set_initial_value('1 / sqrt(7)')
645
+ model.get('ikr.r').set_initial_value('log(binding.koff, 10)')
646
+ m = hh.HHModel.from_component(model.get('ikr'))
647
+ x0 = m.default_state()
648
+ self.assertEqual(len(x0), 2)
649
+ self.assertIsInstance(x0[0], float)
650
+ self.assertIsInstance(x0[1], float)
651
+ self.assertAlmostEqual(x0[0], 0.377964473)
652
+ self.assertAlmostEqual(x0[1], -5)
653
+
648
654
 
649
655
  class AnalyticalSimulationTest(unittest.TestCase):
650
656
  """
@@ -5,11 +5,9 @@
5
5
  # This file is part of Myokit.
6
6
  # See http://myokit.org for copyright, sharing, and licensing details.
7
7
  #
8
- from __future__ import absolute_import, division
9
- from __future__ import print_function, unicode_literals
10
-
11
8
  import os
12
9
  import unittest
10
+
13
11
  import numpy as np
14
12
 
15
13
  import myokit
@@ -17,12 +15,6 @@ import myokit.lib.markov as markov
17
15
 
18
16
  from myokit.tests import DIR_DATA, WarningCollector
19
17
 
20
- # Unit testing in Python 2 and 3
21
- try:
22
- unittest.TestCase.assertRaisesRegex
23
- except AttributeError:
24
- unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
25
-
26
18
 
27
19
  class LinearModelTest(unittest.TestCase):
28
20
  """
@@ -155,8 +147,8 @@ class LinearModelTest(unittest.TestCase):
155
147
 
156
148
  # States must sum to 1
157
149
  m2 = model.clone()
158
- m2.get(states[0]).set_state_value(0.6)
159
- m2.get(states[1]).set_state_value(0.6)
150
+ m2.get(states[0]).set_initial_value(0.6)
151
+ m2.get(states[1]).set_initial_value(0.6)
160
152
  self.assertRaisesRegex(
161
153
  markov.LinearModelError, 'sum of states',
162
154
  markov.LinearModel, m2, states, parameters, current)
@@ -283,7 +275,7 @@ class LinearModelTest(unittest.TestCase):
283
275
 
284
276
  # Check that derivatives with ss are close to zero
285
277
  ss = list(ss)
286
- model.set_state(ss + ss) # Model has 2 ina's
278
+ model.set_initial_values(ss + ss) # Model has 2 ina's
287
279
  derivs = model.evaluate_derivatives()
288
280
  for i in range(len(ss)):
289
281
  self.assertAlmostEqual(0, derivs[i])
@@ -310,7 +302,7 @@ class LinearModelTest(unittest.TestCase):
310
302
  self.assertTrue(np.all(ss <= 1))
311
303
 
312
304
  # Check that derivatives with ss are close to zero
313
- model.set_state(ss)
305
+ model.set_initial_values(ss)
314
306
  derivs = model.evaluate_derivatives()
315
307
  for i in range(len(ss)):
316
308
  self.assertAlmostEqual(0, derivs[i])
@@ -331,6 +323,22 @@ class LinearModelTest(unittest.TestCase):
331
323
  ValueError, 'Illegal parameter vector size',
332
324
  m.rates, parameters=[0.01] * 22)
333
325
 
326
+ def test_initial_value_conversion(self):
327
+ # Tests that initial value expressions are converted to floats
328
+
329
+ fname = os.path.join(DIR_DATA, 'clancy-1999-fitting.mmt')
330
+ model = myokit.load_model(fname)
331
+ model.get('ina.C3').set_initial_value('1 / sqrt(7)')
332
+ model.get('ina.C2').set_initial_value('-1 / log(ina_ref.p)')
333
+ model.get('ina.C1').set_initial_value(0.5134619065149598)
334
+ m = markov.LinearModel.from_component(model.get('ina'))
335
+ x0 = m.default_state()
336
+ self.assertEqual(len(x0), 6)
337
+ self.assertIsInstance(x0[0], float)
338
+ self.assertIsInstance(x0[1], float)
339
+ self.assertAlmostEqual(x0[0], 0.3779644730092272)
340
+ self.assertAlmostEqual(x0[1], 0.10857362047581297)
341
+
334
342
 
335
343
  class AnalyticalSimulationTest(unittest.TestCase):
336
344
  """
@@ -5,9 +5,6 @@
5
5
  # This file is part of Myokit.
6
6
  # See http://myokit.org for copyright, sharing, and licensing details.
7
7
  #
8
- from __future__ import absolute_import, division
9
- from __future__ import print_function, unicode_literals
10
-
11
8
  import os
12
9
  import unittest
13
10
 
@@ -15,12 +12,6 @@ import myokit
15
12
 
16
13
  from myokit.tests import DIR_DATA, WarningCollector
17
14
 
18
- # Unit testing in Python 2 and 3
19
- try:
20
- unittest.TestCase.assertRaisesRegex
21
- except AttributeError:
22
- unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
23
-
24
15
  # Path to multi-model testing files
25
16
  DIR_MULTI = os.path.join(DIR_DATA, 'multi')
26
17
 
@@ -6,16 +6,13 @@
6
6
  # This file is part of Myokit.
7
7
  # See http://myokit.org for copyright, sharing, and licensing details.
8
8
  #
9
- from __future__ import absolute_import, division
10
- from __future__ import print_function, unicode_literals
11
-
12
9
  import os
13
10
  import unittest
14
11
 
15
12
  import myokit
16
13
  import myokit.lib.plots as plots
17
14
 
18
- from myokit.tests import DIR_DATA
15
+ from myokit.tests import DIR_DATA, WarningCollector
19
16
 
20
17
 
21
18
  class LibPlotTest(unittest.TestCase):
@@ -176,20 +173,28 @@ class LibPlotTest(unittest.TestCase):
176
173
  plt.close(fig)
177
174
  plt.show()
178
175
 
179
- # Normalise currents
176
+ # Normalize currents
180
177
  fig = plt.figure()
181
- plots.cumulative_current(d, currents, normalise=True)
178
+ plots.cumulative_current(d, currents, normalize=True)
182
179
  plt.legend()
183
180
  plt.close(fig)
184
181
  plt.show()
185
182
 
186
- # Normalise currents and set maximum number of currents shown
183
+ # Normalize currents and set maximum number of currents shown
187
184
  fig = plt.figure()
188
- plots.cumulative_current(d, currents, normalise=True, max_currents=3)
185
+ plots.cumulative_current(d, currents, normalize=True, max_currents=3)
189
186
  plt.legend()
190
187
  plt.close(fig)
191
188
  plt.show()
192
189
 
190
+ with WarningCollector() as w:
191
+ fig = plt.figure()
192
+ plots.cumulative_current(d, currents, normalise=True)
193
+ plt.legend()
194
+ plt.close(fig)
195
+ plt.show()
196
+ self.assertIn('deprecated', w.text())
197
+
193
198
 
194
199
  if __name__ == '__main__':
195
200
  unittest.main()
myokit/tests/test_meta.py CHANGED
@@ -5,9 +5,6 @@
5
5
  # This file is part of Myokit.
6
6
  # See http://myokit.org for copyright, sharing, and licensing details.
7
7
  #
8
- from __future__ import absolute_import, division
9
- from __future__ import print_function, unicode_literals
10
-
11
8
  import unittest
12
9
 
13
10
  import myokit