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.
- myokit/__init__.py +9 -36
- myokit/__main__.py +76 -142
- myokit/_aux.py +62 -16
- myokit/_bin/example.mmt +1 -2
- myokit/_bin/install-win/menu.json +7 -7
- myokit/_config.py +22 -31
- myokit/_datablock.py +30 -74
- myokit/_datalog.py +49 -72
- myokit/_err.py +25 -24
- myokit/_expressions.py +50 -68
- myokit/_io.py +15 -27
- myokit/_model_api.py +453 -249
- myokit/_myokit_version.py +1 -5
- myokit/_parsing.py +38 -44
- myokit/_progress.py +5 -8
- myokit/_protocol.py +99 -9
- myokit/_sim/__init__.py +7 -24
- myokit/_sim/cable.c +6 -8
- myokit/_sim/cable.py +6 -8
- myokit/_sim/cmodel.h +125 -70
- myokit/_sim/cmodel.py +12 -14
- myokit/_sim/compiler.py +1 -4
- myokit/_sim/cvodessim.c +196 -118
- myokit/_sim/cvodessim.py +130 -103
- myokit/_sim/differential.hpp +4 -4
- myokit/_sim/fiber_tissue.c +4 -8
- myokit/_sim/fiber_tissue.py +11 -13
- myokit/_sim/jacobian.cpp +2 -2
- myokit/_sim/jacobian.py +11 -8
- myokit/_sim/mcl.h +53 -55
- myokit/_sim/opencl.py +21 -27
- myokit/_sim/openclsim.c +3 -7
- myokit/_sim/openclsim.cl +3 -3
- myokit/_sim/openclsim.py +49 -40
- myokit/_sim/pacing.h +36 -16
- myokit/_sim/rhs.c +6 -13
- myokit/_sim/rhs.py +5 -14
- myokit/_sim/sundials.py +1 -4
- myokit/_system.py +10 -16
- myokit/_unit.py +4 -13
- myokit/float.py +0 -3
- myokit/formats/__init__.py +8 -10
- myokit/formats/ansic/__init__.py +0 -3
- myokit/formats/ansic/_ewriter.py +2 -4
- myokit/formats/ansic/_exporter.py +1 -4
- myokit/formats/ansic/template/cable.c +4 -4
- myokit/formats/ansic/template/euler.c +5 -5
- myokit/formats/ansic/template/sim.c +6 -6
- myokit/formats/axon/__init__.py +1 -3
- myokit/formats/axon/_abf.py +12 -17
- myokit/formats/axon/_atf.py +5 -6
- myokit/formats/axon/_importer.py +0 -3
- myokit/formats/cellml/__init__.py +0 -3
- myokit/formats/cellml/_ewriter.py +3 -6
- myokit/formats/cellml/_exporter.py +3 -6
- myokit/formats/cellml/_importer.py +1 -4
- myokit/formats/cellml/v1/__init__.py +0 -4
- myokit/formats/cellml/v1/_api.py +8 -11
- myokit/formats/cellml/v1/_parser.py +2 -5
- myokit/formats/cellml/v1/_writer.py +2 -11
- myokit/formats/cellml/v2/__init__.py +0 -3
- myokit/formats/cellml/v2/_api.py +8 -17
- myokit/formats/cellml/v2/_parser.py +2 -5
- myokit/formats/cellml/v2/_writer.py +1 -4
- myokit/formats/channelml/__init__.py +0 -3
- myokit/formats/channelml/_importer.py +11 -21
- myokit/formats/cpp/__init__.py +1 -3
- myokit/formats/cpp/_ewriter.py +0 -3
- myokit/formats/cuda/__init__.py +0 -3
- myokit/formats/cuda/_ewriter.py +2 -4
- myokit/formats/cuda/_exporter.py +0 -3
- myokit/formats/cuda/template/kernel.cu +8 -5
- myokit/formats/easyml/__init__.py +0 -3
- myokit/formats/easyml/_ewriter.py +9 -11
- myokit/formats/easyml/_exporter.py +2 -5
- myokit/formats/html/__init__.py +0 -3
- myokit/formats/html/_exporter.py +0 -3
- myokit/formats/html/_flatten.py +5 -21
- myokit/formats/latex/__init__.py +0 -3
- myokit/formats/latex/_ewriter.py +1 -4
- myokit/formats/latex/_exporter.py +4 -6
- myokit/formats/mathml/__init__.py +0 -3
- myokit/formats/mathml/_ewriter.py +2 -11
- myokit/formats/mathml/_parser.py +4 -6
- myokit/formats/matlab/__init__.py +0 -3
- myokit/formats/matlab/_ewriter.py +1 -4
- myokit/formats/matlab/_exporter.py +2 -5
- myokit/formats/matlab/template/main.m +3 -2
- myokit/formats/opencl/__init__.py +0 -3
- myokit/formats/opencl/_ewriter.py +2 -4
- myokit/formats/opencl/_exporter.py +2 -5
- myokit/formats/opencl/template/cable.c +10 -10
- myokit/formats/opencl/template/kernel.cl +1 -1
- myokit/formats/opencl/template/minilog.py +1 -1
- myokit/formats/python/__init__.py +0 -3
- myokit/formats/python/_ewriter.py +2 -5
- myokit/formats/python/_exporter.py +0 -3
- myokit/formats/python/template/sim.py +14 -14
- myokit/formats/sbml/__init__.py +0 -3
- myokit/formats/sbml/_api.py +50 -44
- myokit/formats/sbml/_importer.py +1 -4
- myokit/formats/sbml/_parser.py +2 -5
- myokit/formats/stan/__init__.py +0 -3
- myokit/formats/stan/_ewriter.py +2 -4
- myokit/formats/stan/_exporter.py +2 -5
- myokit/formats/stan/template/cell.stan +3 -3
- myokit/formats/sympy/__init__.py +0 -3
- myokit/formats/sympy/_ereader.py +1 -4
- myokit/formats/sympy/_ewriter.py +2 -5
- myokit/formats/wcp/__init__.py +0 -3
- myokit/formats/wcp/_wcp.py +2 -8
- myokit/formats/xml/__init__.py +0 -3
- myokit/formats/xml/_exporter.py +0 -3
- myokit/formats/xml/_split.py +0 -3
- myokit/gui/__init__.py +80 -246
- myokit/gui/datablock_viewer.py +103 -86
- myokit/gui/datalog_viewer.py +214 -66
- myokit/gui/explorer.py +15 -21
- myokit/gui/ide.py +171 -144
- myokit/gui/progress.py +9 -9
- myokit/gui/source.py +406 -375
- myokit/gui/vargrapher.py +2 -12
- myokit/lib/deps.py +12 -13
- myokit/lib/guess.py +3 -4
- myokit/lib/hh.py +20 -18
- myokit/lib/markov.py +21 -20
- myokit/lib/multi.py +1 -3
- myokit/lib/plots.py +20 -9
- myokit/pacing.py +0 -3
- myokit/pype.py +7 -18
- myokit/tests/__init__.py +3 -6
- myokit/tests/ansic_event_based_pacing.py +1 -4
- myokit/tests/ansic_fixed_form_pacing.py +3 -6
- myokit/tests/data/beeler-1977-model-compare-b.mmt +2 -2
- myokit/tests/data/clancy-1999-fitting.mmt +1 -0
- myokit/tests/test_aux.py +13 -28
- myokit/tests/test_cellml_v1_api.py +4 -19
- myokit/tests/test_cellml_v1_parser.py +0 -15
- myokit/tests/test_cellml_v1_writer.py +0 -9
- myokit/tests/test_cellml_v2_api.py +4 -19
- myokit/tests/test_cellml_v2_parser.py +0 -15
- myokit/tests/test_cellml_v2_writer.py +0 -9
- myokit/tests/test_cmodel.py +16 -22
- myokit/tests/test_compiler_detection.py +1 -11
- myokit/tests/test_component.py +108 -56
- myokit/tests/test_config.py +34 -67
- myokit/tests/test_datablock.py +1 -9
- myokit/tests/test_datalog.py +19 -24
- myokit/tests/test_dependency_checking.py +8 -23
- myokit/tests/test_expressions.py +0 -9
- myokit/tests/test_float.py +1 -5
- myokit/tests/test_formats.py +0 -9
- myokit/tests/test_formats_axon.py +1 -9
- myokit/tests/test_formats_cellml.py +0 -15
- myokit/tests/test_formats_channelml.py +0 -15
- myokit/tests/test_formats_easyml.py +0 -14
- myokit/tests/test_formats_exporters.py +1 -16
- myokit/tests/test_formats_expression_writers.py +1 -17
- myokit/tests/test_formats_html.py +0 -3
- myokit/tests/test_formats_importers.py +1 -16
- myokit/tests/test_formats_mathml_content.py +0 -9
- myokit/tests/test_formats_mathml_presentation.py +0 -9
- myokit/tests/test_formats_opencl.py +0 -10
- myokit/tests/test_formats_sbml.py +0 -15
- myokit/tests/test_formats_sympy.py +0 -9
- myokit/tests/test_formats_wcp.py +1 -3
- myokit/tests/test_io.py +27 -27
- myokit/tests/test_jacobian_calculator.py +6 -14
- myokit/tests/test_jacobian_tracer.py +0 -9
- myokit/tests/test_lib_deps.py +0 -9
- myokit/tests/test_lib_guess.py +0 -9
- myokit/tests/test_lib_hh.py +18 -12
- myokit/tests/test_lib_markov.py +21 -13
- myokit/tests/test_lib_multi.py +0 -9
- myokit/tests/test_lib_plots.py +13 -8
- myokit/tests/test_meta.py +0 -3
- myokit/tests/test_model.py +390 -96
- myokit/tests/test_model_building.py +44 -96
- myokit/tests/test_opencl_info.py +5 -14
- myokit/tests/test_pacing_factory.py +0 -3
- myokit/tests/test_pacing_system_c.py +1 -23
- myokit/tests/test_pacing_system_py.py +0 -9
- myokit/tests/test_parsing.py +139 -56
- myokit/tests/test_progress_reporters.py +0 -3
- myokit/tests/test_protocol.py +0 -9
- myokit/tests/test_protocol_floating_point.py +1 -10
- myokit/tests/test_protocol_time_series.py +82 -0
- myokit/tests/test_pype.py +0 -9
- myokit/tests/test_quantity.py +0 -9
- myokit/tests/test_rhs_benchmarker.py +1 -9
- myokit/tests/test_sbml_api.py +27 -42
- myokit/tests/test_sbml_parser.py +4 -19
- myokit/tests/test_simulation_1d.py +45 -25
- myokit/tests/test_simulation_cvodes.py +321 -55
- myokit/tests/test_simulation_cvodes_from_disk.py +0 -3
- myokit/tests/test_simulation_fiber_tissue.py +39 -12
- myokit/tests/test_simulation_log_interval.py +1 -431
- myokit/tests/test_simulation_opencl.py +69 -48
- myokit/tests/test_simulation_opencl_log_interval.py +1 -3
- myokit/tests/test_simulation_opencl_vs_cvode.py +1 -10
- myokit/tests/test_simulation_opencl_vs_sim1d.py +1 -10
- myokit/tests/test_system_info.py +1 -11
- myokit/tests/test_tools.py +0 -9
- myokit/tests/test_unit.py +1 -10
- myokit/tests/test_user_functions.py +0 -10
- myokit/tests/test_variable.py +231 -27
- myokit/tools.py +5 -21
- myokit/units.py +5 -3
- {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/METADATA +12 -15
- myokit-1.35.0.dist-info/RECORD +391 -0
- {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/WHEEL +1 -1
- {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/entry_points.txt +0 -1
- myokit/_exec_new.py +0 -15
- myokit/_exec_old.py +0 -15
- myokit/_sim/cvodesim.c +0 -1551
- myokit/_sim/cvodesim.py +0 -674
- myokit/_sim/icsim.cpp +0 -563
- myokit/_sim/icsim.py +0 -363
- myokit/_sim/psim.cpp +0 -656
- myokit/_sim/psim.py +0 -493
- myokit/lib/common.py +0 -1094
- myokit/tests/test_lib_common.py +0 -130
- myokit/tests/test_simulation_cvode.py +0 -612
- myokit/tests/test_simulation_ic.py +0 -108
- myokit/tests/test_simulation_p.py +0 -223
- myokit-1.33.9.dist-info/RECORD +0 -403
- /myokit/formats/opencl/template/{test → test.sh} +0 -0
- {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/LICENSE.txt +0 -0
- {myokit-1.33.9.dist-info → myokit-1.35.0.dist-info}/top_level.txt +0 -0
myokit/tests/test_aux.py
CHANGED
|
@@ -5,25 +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
|
-
|
|
9
|
-
from __future__ import print_function, unicode_literals
|
|
10
|
-
|
|
8
|
+
import io
|
|
11
9
|
import os
|
|
12
10
|
import re
|
|
13
11
|
import unittest
|
|
14
12
|
|
|
15
|
-
# StringIO in Python 2 and 3
|
|
16
|
-
try:
|
|
17
|
-
from cStringIO import StringIO
|
|
18
|
-
except ImportError: # pragma: no python 2 cover
|
|
19
|
-
from io import StringIO
|
|
20
|
-
|
|
21
|
-
# Strings in Python2 and Python3
|
|
22
|
-
try:
|
|
23
|
-
basestring
|
|
24
|
-
except NameError: # pragma: no cover
|
|
25
|
-
basestring = str
|
|
26
|
-
|
|
27
13
|
import myokit
|
|
28
14
|
|
|
29
15
|
from myokit.tests import DIR_DATA, WarningCollector
|
|
@@ -87,7 +73,7 @@ class AuxTest(unittest.TestCase):
|
|
|
87
73
|
|
|
88
74
|
# Test without a model
|
|
89
75
|
script = myokit.default_script()
|
|
90
|
-
self.assertTrue(isinstance(script,
|
|
76
|
+
self.assertTrue(isinstance(script, str))
|
|
91
77
|
self.assertIn('run(1000)', script)
|
|
92
78
|
|
|
93
79
|
# Test adapting the time unit
|
|
@@ -95,29 +81,29 @@ class AuxTest(unittest.TestCase):
|
|
|
95
81
|
t = model.add_component('c').add_variable('t')
|
|
96
82
|
t.set_rhs(0)
|
|
97
83
|
script = myokit.default_script(model)
|
|
98
|
-
self.assertTrue(isinstance(script,
|
|
84
|
+
self.assertTrue(isinstance(script, str))
|
|
99
85
|
self.assertIn('run(1000)', script)
|
|
100
86
|
|
|
101
87
|
t.set_binding('time')
|
|
102
88
|
script = myokit.default_script(model)
|
|
103
|
-
self.assertTrue(isinstance(script,
|
|
89
|
+
self.assertTrue(isinstance(script, str))
|
|
104
90
|
self.assertIn('run(1000)', script)
|
|
105
91
|
|
|
106
92
|
t.set_unit('s')
|
|
107
93
|
script = myokit.default_script(model)
|
|
108
|
-
self.assertTrue(isinstance(script,
|
|
94
|
+
self.assertTrue(isinstance(script, str))
|
|
109
95
|
self.assertIn('run(1.0)', script)
|
|
110
96
|
|
|
111
97
|
t.set_unit('ms')
|
|
112
98
|
script = myokit.default_script(model)
|
|
113
|
-
self.assertTrue(isinstance(script,
|
|
99
|
+
self.assertTrue(isinstance(script, str))
|
|
114
100
|
self.assertIn('run(1000)', script)
|
|
115
101
|
|
|
116
102
|
# Test plotting membrane potential
|
|
117
103
|
v = model.get('c').add_variable('v')
|
|
118
104
|
v.set_label('membrane_potential')
|
|
119
105
|
script = myokit.default_script(model)
|
|
120
|
-
self.assertTrue(isinstance(script,
|
|
106
|
+
self.assertTrue(isinstance(script, str))
|
|
121
107
|
self.assertIn("var = 'c.v'", script)
|
|
122
108
|
|
|
123
109
|
# TODO: Run with tiny model?
|
|
@@ -163,6 +149,7 @@ class AuxTest(unittest.TestCase):
|
|
|
163
149
|
'[1] Missing User function <g(1)>.',
|
|
164
150
|
'[x] Mismatched Time variable: [1]<engine.time> [2]<engine.toim>',
|
|
165
151
|
'[x] Mismatched Initial value for <ina.h>',
|
|
152
|
+
'[x] Mismatched Initial value for <ina.j>',
|
|
166
153
|
'[x] Mismatched State at position 5: [1]<isi.d> [2]<isiz.d>',
|
|
167
154
|
'[x] Mismatched State at position 6: [1]<isi.f> [2]<isiz.f>',
|
|
168
155
|
'[2] Missing state at position 7',
|
|
@@ -193,9 +180,6 @@ class AuxTest(unittest.TestCase):
|
|
|
193
180
|
' ' + str(len(differences)) + ' differences found',
|
|
194
181
|
]
|
|
195
182
|
|
|
196
|
-
# Show massive diff messages
|
|
197
|
-
self.maxDiff = None
|
|
198
|
-
|
|
199
183
|
caught_differences = set(capture.text().splitlines())
|
|
200
184
|
live = set(live)
|
|
201
185
|
self.assertEqual(live, caught_differences)
|
|
@@ -276,8 +260,6 @@ class AuxTest(unittest.TestCase):
|
|
|
276
260
|
'import myokit',
|
|
277
261
|
'm = get_model()', # Test magic methods
|
|
278
262
|
'p = get_protocol()',
|
|
279
|
-
's = myokit.Simulation(m, p)',
|
|
280
|
-
's.run(200)',
|
|
281
263
|
])
|
|
282
264
|
with myokit.tools.capture():
|
|
283
265
|
myokit.run(m, p, x)
|
|
@@ -287,7 +269,7 @@ class AuxTest(unittest.TestCase):
|
|
|
287
269
|
|
|
288
270
|
# Test with stringio
|
|
289
271
|
x = "print('Hi there')"
|
|
290
|
-
s = StringIO()
|
|
272
|
+
s = io.StringIO()
|
|
291
273
|
with myokit.tools.capture() as c:
|
|
292
274
|
myokit.run(m, p, x, stderr=s, stdout=s)
|
|
293
275
|
self.assertEqual(c.text(), '')
|
|
@@ -513,6 +495,9 @@ class AuxTest(unittest.TestCase):
|
|
|
513
495
|
# Test positive/negative zero comparison
|
|
514
496
|
m1 = myokit.Model()
|
|
515
497
|
c = m1.add_component('c')
|
|
498
|
+
t = c.add_variable('t')
|
|
499
|
+
t.set_binding('time')
|
|
500
|
+
t.set_rhs(0)
|
|
516
501
|
x = c.add_variable('x')
|
|
517
502
|
x.promote(1)
|
|
518
503
|
x.set_rhs('-0.0')
|
|
@@ -564,7 +549,7 @@ class AuxTest(unittest.TestCase):
|
|
|
564
549
|
|
|
565
550
|
# Raw version
|
|
566
551
|
raw = myokit.version(raw=True)
|
|
567
|
-
self.assertIsInstance(raw,
|
|
552
|
+
self.assertIsInstance(raw, str)
|
|
568
553
|
parts = raw.split('.')
|
|
569
554
|
self.assertTrue(len(parts) in [3, 4])
|
|
570
555
|
|
|
@@ -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
|
|
@@ -15,18 +12,6 @@ import myokit.formats.cellml.v1 as cellml
|
|
|
15
12
|
|
|
16
13
|
from myokit.tests import 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
|
-
# Strings in Python2 and Python3
|
|
25
|
-
try:
|
|
26
|
-
basestring
|
|
27
|
-
except NameError: # pragma: no cover
|
|
28
|
-
basestring = str
|
|
29
|
-
|
|
30
15
|
|
|
31
16
|
class TestCellML1AnnotatedElement(unittest.TestCase):
|
|
32
17
|
""" Tests for cellml.AnnotatableElement. """
|
|
@@ -730,8 +715,8 @@ class TestCellML1ModelConversion(unittest.TestCase):
|
|
|
730
715
|
# Recreate myokit model and test states
|
|
731
716
|
mm = cm.myokit_model()
|
|
732
717
|
mm.validate()
|
|
733
|
-
state_1 = m.
|
|
734
|
-
state_2 = mm.
|
|
718
|
+
state_1 = m.initial_values(True)
|
|
719
|
+
state_2 = mm.initial_values(True)
|
|
735
720
|
states_1 = [x.name() for x in m.states()]
|
|
736
721
|
states_2 = [x.name() for x in mm.states()]
|
|
737
722
|
state_2 = [state_2[states_2.index(x)] for x in states_1]
|
|
@@ -830,7 +815,7 @@ class TestCellML1ModelConversion(unittest.TestCase):
|
|
|
830
815
|
|
|
831
816
|
# Check state
|
|
832
817
|
self.assertTrue(mx.is_state())
|
|
833
|
-
self.assertEqual(mx.
|
|
818
|
+
self.assertEqual(mx.initial_value(True), 0.123)
|
|
834
819
|
|
|
835
820
|
# Check binding
|
|
836
821
|
self.assertEqual(mt.binding(), 'time')
|
|
@@ -1503,7 +1488,7 @@ class TestCellML1Units(unittest.TestCase):
|
|
|
1503
1488
|
names = [x for x in cellml.Units.si_unit_names()]
|
|
1504
1489
|
self.assertTrue(len(names) > 10)
|
|
1505
1490
|
for name in names:
|
|
1506
|
-
self.assertTrue(isinstance(name,
|
|
1491
|
+
self.assertTrue(isinstance(name, str))
|
|
1507
1492
|
if name == 'celsius':
|
|
1508
1493
|
continue
|
|
1509
1494
|
self.assertTrue(
|
|
@@ -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
|
|
|
@@ -20,18 +17,6 @@ from myokit.tests import TemporaryDirectory, DIR_FORMATS, WarningCollector
|
|
|
20
17
|
# CellML directory
|
|
21
18
|
DIR = os.path.join(DIR_FORMATS, 'cellml')
|
|
22
19
|
|
|
23
|
-
# Unit testing in Python 2 and 3
|
|
24
|
-
try:
|
|
25
|
-
unittest.TestCase.assertRaisesRegex
|
|
26
|
-
except AttributeError:
|
|
27
|
-
unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
|
|
28
|
-
|
|
29
|
-
# Strings in Python2 and Python3
|
|
30
|
-
try:
|
|
31
|
-
basestring
|
|
32
|
-
except NameError: # pragma: no cover
|
|
33
|
-
basestring = str
|
|
34
|
-
|
|
35
20
|
|
|
36
21
|
class TestCellMLParser(unittest.TestCase):
|
|
37
22
|
""" Tests the CellML 1.0/1.1 parser (mostly for errors). """
|
|
@@ -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 re
|
|
12
9
|
import unittest
|
|
13
10
|
|
|
@@ -16,12 +13,6 @@ import myokit.formats.cellml.v1 as cellml
|
|
|
16
13
|
|
|
17
14
|
from myokit.tests import TemporaryDirectory, WarningCollector
|
|
18
15
|
|
|
19
|
-
# Unit testing in Python 2 and 3
|
|
20
|
-
try:
|
|
21
|
-
unittest.TestCase.assertRaisesRegex
|
|
22
|
-
except AttributeError:
|
|
23
|
-
unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
|
|
24
|
-
|
|
25
16
|
|
|
26
17
|
class TestCellMLWriter(unittest.TestCase):
|
|
27
18
|
""" Tests for cellml.Writer. """
|
|
@@ -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
|
|
@@ -15,18 +12,6 @@ import myokit.formats.cellml.v2 as cellml
|
|
|
15
12
|
|
|
16
13
|
from myokit.tests import 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
|
-
# Strings in Python2 and Python3
|
|
25
|
-
try:
|
|
26
|
-
basestring
|
|
27
|
-
except NameError: # pragma: no cover
|
|
28
|
-
basestring = str
|
|
29
|
-
|
|
30
15
|
|
|
31
16
|
class TestCellML2AnnotatableElement(unittest.TestCase):
|
|
32
17
|
""" Tests for ``cellml.v2.AnnotatableElement``. """
|
|
@@ -909,8 +894,8 @@ class TestCellML2ModelConversion(unittest.TestCase):
|
|
|
909
894
|
# Recreate myokit model and test states
|
|
910
895
|
mm = cm.myokit_model()
|
|
911
896
|
mm.validate()
|
|
912
|
-
state_1 = m.
|
|
913
|
-
state_2 = mm.
|
|
897
|
+
state_1 = m.initial_values(True)
|
|
898
|
+
state_2 = mm.initial_values(True)
|
|
914
899
|
states_1 = [x.name() for x in m.states()]
|
|
915
900
|
states_2 = [x.name() for x in mm.states()]
|
|
916
901
|
state_2 = [state_2[states_2.index(x)] for x in states_1]
|
|
@@ -1013,7 +998,7 @@ class TestCellML2ModelConversion(unittest.TestCase):
|
|
|
1013
998
|
|
|
1014
999
|
# Check state
|
|
1015
1000
|
self.assertTrue(mx.is_state())
|
|
1016
|
-
self.assertEqual(mx.
|
|
1001
|
+
self.assertEqual(mx.initial_value(True), 0.123)
|
|
1017
1002
|
|
|
1018
1003
|
# Check binding
|
|
1019
1004
|
self.assertEqual(mt.binding(), 'time')
|
|
@@ -1810,7 +1795,7 @@ class TestCellML2Units(unittest.TestCase):
|
|
|
1810
1795
|
names = [x for x in cellml.Units.si_unit_names()]
|
|
1811
1796
|
self.assertTrue(len(names) > 10)
|
|
1812
1797
|
for name in names:
|
|
1813
|
-
self.assertTrue(isinstance(name,
|
|
1798
|
+
self.assertTrue(isinstance(name, str))
|
|
1814
1799
|
self.assertTrue(
|
|
1815
1800
|
isinstance(cellml.Units.find_units(name), cellml.Units))
|
|
1816
1801
|
|
|
@@ -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
|
|
|
@@ -19,18 +16,6 @@ from myokit.tests import TemporaryDirectory, DIR_FORMATS, WarningCollector
|
|
|
19
16
|
# CellML directory
|
|
20
17
|
DIR = os.path.join(DIR_FORMATS, 'cellml')
|
|
21
18
|
|
|
22
|
-
# Unit testing in Python 2 and 3
|
|
23
|
-
try:
|
|
24
|
-
unittest.TestCase.assertRaisesRegex
|
|
25
|
-
except AttributeError:
|
|
26
|
-
unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
|
|
27
|
-
|
|
28
|
-
# Strings in Python2 and Python3
|
|
29
|
-
try:
|
|
30
|
-
basestring
|
|
31
|
-
except NameError: # pragma: no cover
|
|
32
|
-
basestring = str
|
|
33
|
-
|
|
34
19
|
|
|
35
20
|
class TestCellMLParser(unittest.TestCase):
|
|
36
21
|
""" Tests the CellML 2.0 parser (mostly for errors / model validation). """
|
|
@@ -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 re
|
|
12
9
|
import unittest
|
|
13
10
|
|
|
@@ -16,12 +13,6 @@ import myokit.formats.cellml.v2 as cellml
|
|
|
16
13
|
|
|
17
14
|
from myokit.tests import TemporaryDirectory, WarningCollector
|
|
18
15
|
|
|
19
|
-
# Unit testing in Python 2 and 3
|
|
20
|
-
try:
|
|
21
|
-
unittest.TestCase.assertRaisesRegex
|
|
22
|
-
except AttributeError:
|
|
23
|
-
unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
|
|
24
|
-
|
|
25
16
|
|
|
26
17
|
class TestCellMLWriter(unittest.TestCase):
|
|
27
18
|
""" Tests for cellml.Writer. """
|
myokit/tests/test_cmodel.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 os
|
|
12
9
|
import unittest
|
|
13
10
|
|
|
@@ -15,12 +12,6 @@ import myokit
|
|
|
15
12
|
|
|
16
13
|
from myokit.tests import DIR_DATA
|
|
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
|
|
|
25
16
|
class CModelTest(unittest.TestCase):
|
|
26
17
|
"""
|
|
@@ -33,7 +24,10 @@ class CModelTest(unittest.TestCase):
|
|
|
33
24
|
m, p, x = myokit.load(os.path.join(DIR_DATA, 'lr-1991.mmt'))
|
|
34
25
|
cls.model = m
|
|
35
26
|
cls.sensitivities = (['ik1.gK1', 'ikp.IKp'], ['cell.K_o', 'ikp.gKp'])
|
|
36
|
-
cls.
|
|
27
|
+
cls.pacing_labels = {}
|
|
28
|
+
cls.cmodel = myokit.CModel(
|
|
29
|
+
cls.model, cls.pacing_labels, cls.sensitivities
|
|
30
|
+
)
|
|
37
31
|
|
|
38
32
|
def test_sensitivities(self):
|
|
39
33
|
# Test instantiation of cmodel with sensitivities
|
|
@@ -41,14 +35,14 @@ class CModelTest(unittest.TestCase):
|
|
|
41
35
|
# Bad type
|
|
42
36
|
sens = 'Bad type'
|
|
43
37
|
with self.assertRaisesRegex(ValueError, 'The argument `sensitivities'):
|
|
44
|
-
myokit.CModel(self.model, sens)
|
|
38
|
+
myokit.CModel(self.model, self.pacing_labels, sens)
|
|
45
39
|
|
|
46
40
|
# Empty deps or indeps
|
|
47
41
|
sens = ([], ['some parameter'])
|
|
48
|
-
m = myokit.CModel(self.model, sens)
|
|
42
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
49
43
|
self.assertFalse(m.has_sensitivities)
|
|
50
44
|
sens = (['some state'], [])
|
|
51
|
-
m = myokit.CModel(self.model, sens)
|
|
45
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
52
46
|
self.assertFalse(m.has_sensitivities)
|
|
53
47
|
|
|
54
48
|
# Provide sensitivies as Variables
|
|
@@ -57,14 +51,14 @@ class CModelTest(unittest.TestCase):
|
|
|
57
51
|
p1 = self.model.get('cell.K_o')
|
|
58
52
|
p2 = self.model.get('ikp.gKp')
|
|
59
53
|
sens = ([s1, s2], [p1, p2])
|
|
60
|
-
m = myokit.CModel(self.model, sens)
|
|
54
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
61
55
|
self.assertTrue(m.has_sensitivities)
|
|
62
56
|
|
|
63
57
|
# Provide sensitivities as Names
|
|
64
58
|
sens = (
|
|
65
59
|
[myokit.Name(s1), myokit.Name(s2)],
|
|
66
60
|
[myokit.Name(p1), myokit.Name(p2)])
|
|
67
|
-
m = myokit.CModel(self.model, sens)
|
|
61
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
68
62
|
self.assertTrue(m.has_sensitivities)
|
|
69
63
|
|
|
70
64
|
# Sensitivity of derivative
|
|
@@ -72,13 +66,13 @@ class CModelTest(unittest.TestCase):
|
|
|
72
66
|
sens = (
|
|
73
67
|
[myokit.Derivative(myokit.Name(s3)), myokit.Name(s2)],
|
|
74
68
|
[myokit.Name(p1), myokit.Name(p2)])
|
|
75
|
-
m = myokit.CModel(self.model, sens)
|
|
69
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
76
70
|
self.assertTrue(m.has_sensitivities)
|
|
77
71
|
s3 = 'dot(ik.x)'
|
|
78
72
|
sens = (
|
|
79
73
|
[s3, myokit.Name(s2)],
|
|
80
74
|
[myokit.Name(p1), myokit.Name(p2)])
|
|
81
|
-
m = myokit.CModel(self.model, sens)
|
|
75
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
82
76
|
self.assertTrue(m.has_sensitivities)
|
|
83
77
|
|
|
84
78
|
# Sensitivity of derivative of non-state
|
|
@@ -86,21 +80,21 @@ class CModelTest(unittest.TestCase):
|
|
|
86
80
|
[myokit.Derivative(myokit.Name(s1)), myokit.Name(s2)],
|
|
87
81
|
[myokit.Name(p1), myokit.Name(p2)])
|
|
88
82
|
with self.assertRaisesRegex(ValueError, 'Sensitivity of '):
|
|
89
|
-
myokit.CModel(self.model, sens)
|
|
83
|
+
myokit.CModel(self.model, self.pacing_labels, sens)
|
|
90
84
|
|
|
91
85
|
# Sensitivity of bound variable
|
|
92
86
|
sens = (
|
|
93
87
|
['engine.time', myokit.Name(s2)],
|
|
94
88
|
[myokit.Name(p1), myokit.Name(p2)])
|
|
95
89
|
with self.assertRaisesRegex(ValueError, 'Sensitivities cannot'):
|
|
96
|
-
myokit.CModel(self.model, sens)
|
|
90
|
+
myokit.CModel(self.model, self.pacing_labels, sens)
|
|
97
91
|
|
|
98
92
|
# Sensitivity w.r.t. Initial value
|
|
99
93
|
s3 = self.model.get('ik.x')
|
|
100
94
|
sens = (
|
|
101
95
|
[s3, myokit.Name(s2)],
|
|
102
96
|
[myokit.Name(p1), myokit.InitialValue(myokit.Name(s3))])
|
|
103
|
-
m = myokit.CModel(self.model, sens)
|
|
97
|
+
m = myokit.CModel(self.model, self.pacing_labels, sens)
|
|
104
98
|
self.assertTrue(m.has_sensitivities)
|
|
105
99
|
|
|
106
100
|
# Sensitivity w.r.t. initial value of non-state
|
|
@@ -108,14 +102,14 @@ class CModelTest(unittest.TestCase):
|
|
|
108
102
|
[myokit.Name(s1), myokit.Name(s2)],
|
|
109
103
|
[myokit.Name(p1), myokit.InitialValue(myokit.Name(p2))])
|
|
110
104
|
with self.assertRaisesRegex(ValueError, 'Sensitivity with respect to'):
|
|
111
|
-
myokit.CModel(self.model, sens)
|
|
105
|
+
myokit.CModel(self.model, self.pacing_labels, sens)
|
|
112
106
|
|
|
113
107
|
# Sensitivity w.r.t. non-literal
|
|
114
108
|
sens = (
|
|
115
109
|
[myokit.Name(s1), myokit.Name(s2)],
|
|
116
110
|
[myokit.Name(p1), 'ik.E'])
|
|
117
111
|
with self.assertRaisesRegex(ValueError, 'Sensitivity with respect to'):
|
|
118
|
-
myokit.CModel(self.model, sens)
|
|
112
|
+
myokit.CModel(self.model, self.pacing_labels, sens)
|
|
119
113
|
|
|
120
114
|
|
|
121
115
|
if __name__ == '__main__':
|
|
@@ -5,28 +5,18 @@
|
|
|
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
|
|
|
15
12
|
|
|
16
|
-
# Strings in Python2 and Python3
|
|
17
|
-
try:
|
|
18
|
-
basestring
|
|
19
|
-
except NameError: # pragma: no cover
|
|
20
|
-
basestring = str
|
|
21
|
-
|
|
22
|
-
|
|
23
13
|
class CompilerDetectionTest(unittest.TestCase):
|
|
24
14
|
"""
|
|
25
15
|
Tests the compiler detection.
|
|
26
16
|
"""
|
|
27
17
|
def test_compiler(self):
|
|
28
18
|
# Test the compiler detection.
|
|
29
|
-
self.assertIsInstance(myokit.Compiler.info(),
|
|
19
|
+
self.assertIsInstance(myokit.Compiler.info(), str)
|
|
30
20
|
|
|
31
21
|
|
|
32
22
|
if __name__ == '__main__':
|