myokit 1.36.1__py3-none-any.whl → 1.37.1__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 (65) hide show
  1. myokit/__init__.py +6 -19
  2. myokit/_aux.py +4 -0
  3. myokit/_datablock.py +55 -65
  4. myokit/_datalog.py +42 -7
  5. myokit/_err.py +26 -3
  6. myokit/_expressions.py +241 -127
  7. myokit/_model_api.py +19 -13
  8. myokit/_myokit_version.py +1 -1
  9. myokit/_sim/jacobian.py +3 -3
  10. myokit/_sim/openclsim.py +5 -5
  11. myokit/_sim/rhs.py +1 -1
  12. myokit/formats/__init__.py +4 -9
  13. myokit/formats/ansic/_ewriter.py +4 -20
  14. myokit/formats/axon/_abf.py +11 -4
  15. myokit/formats/diffsl/__init__.py +60 -0
  16. myokit/formats/diffsl/_ewriter.py +145 -0
  17. myokit/formats/diffsl/_exporter.py +435 -0
  18. myokit/formats/heka/_patchmaster.py +345 -115
  19. myokit/formats/opencl/_ewriter.py +3 -42
  20. myokit/formats/opencl/template/minilog.py +1 -1
  21. myokit/formats/sympy/_ereader.py +2 -1
  22. myokit/formats/wcp/_wcp.py +3 -3
  23. myokit/gui/datalog_viewer.py +28 -9
  24. myokit/lib/markov.py +2 -2
  25. myokit/lib/plots.py +4 -4
  26. myokit/tests/data/formats/wcp-file-empty.wcp +0 -0
  27. myokit/tests/data/io/bad1d-2-no-header.zip +0 -0
  28. myokit/tests/data/io/bad1d-3-no-data.zip +0 -0
  29. myokit/tests/data/io/bad1d-4-not-a-zip.zip +1 -105
  30. myokit/tests/data/io/bad1d-5-bad-data-type.zip +0 -0
  31. myokit/tests/data/io/bad1d-6-time-too-short.zip +0 -0
  32. myokit/tests/data/io/bad1d-7-0d-too-short.zip +0 -0
  33. myokit/tests/data/io/bad1d-8-1d-too-short.zip +0 -0
  34. myokit/tests/data/io/bad2d-2-no-header.zip +0 -0
  35. myokit/tests/data/io/bad2d-3-no-data.zip +0 -0
  36. myokit/tests/data/io/bad2d-4-not-a-zip.zip +1 -105
  37. myokit/tests/data/io/bad2d-5-bad-data-type.zip +0 -0
  38. myokit/tests/data/io/bad2d-8-2d-too-short.zip +0 -0
  39. myokit/tests/data/io/block1d.mmt +187 -0
  40. myokit/tests/data/io/datalog-18-duplicate-keys.csv +4 -0
  41. myokit/tests/test_aux.py +4 -0
  42. myokit/tests/test_datablock.py +16 -16
  43. myokit/tests/test_datalog.py +24 -1
  44. myokit/tests/test_expressions.py +532 -251
  45. myokit/tests/test_formats_ansic.py +6 -18
  46. myokit/tests/test_formats_cpp.py +0 -5
  47. myokit/tests/test_formats_cuda.py +7 -15
  48. myokit/tests/test_formats_diffsl.py +728 -0
  49. myokit/tests/test_formats_easyml.py +4 -9
  50. myokit/tests/test_formats_exporters_run.py +3 -0
  51. myokit/tests/test_formats_latex.py +10 -11
  52. myokit/tests/test_formats_matlab.py +0 -8
  53. myokit/tests/test_formats_opencl.py +0 -29
  54. myokit/tests/test_formats_python.py +2 -19
  55. myokit/tests/test_formats_stan.py +0 -13
  56. myokit/tests/test_formats_sympy.py +3 -3
  57. myokit/tests/test_formats_wcp.py +15 -0
  58. myokit/tests/test_model.py +20 -20
  59. myokit/tests/test_parsing.py +19 -0
  60. {myokit-1.36.1.dist-info → myokit-1.37.1.dist-info}/METADATA +1 -1
  61. {myokit-1.36.1.dist-info → myokit-1.37.1.dist-info}/RECORD +65 -58
  62. {myokit-1.36.1.dist-info → myokit-1.37.1.dist-info}/LICENSE.txt +0 -0
  63. {myokit-1.36.1.dist-info → myokit-1.37.1.dist-info}/WHEEL +0 -0
  64. {myokit-1.36.1.dist-info → myokit-1.37.1.dist-info}/entry_points.txt +0 -0
  65. {myokit-1.36.1.dist-info → myokit-1.37.1.dist-info}/top_level.txt +0 -0
@@ -176,11 +176,13 @@ class AnsiCExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
176
176
 
177
177
  def test_conditions(self):
178
178
  a, b, c, d = self.abcd
179
+ p = myokit.Equal(a, b)
180
+ q = myokit.NotEqual(c, d)
179
181
 
180
- self.eq(And(a, b), '(a && b)')
181
- self.eq(Or(d, c), '(d || c)')
182
- self.eq(Not(And(a, b)), '(!(a && b))')
183
- self.eq(Not(c), '(!(c))')
182
+ self.eq(And(p, q), '((a == b) && (c != d))')
183
+ self.eq(Or(q, p), '((c != d) || (a == b))')
184
+ self.eq(Not(And(p, q)), '(!((a == b) && (c != d)))')
185
+ self.eq(Not(p), '(!(a == b))')
184
186
 
185
187
  self.eq(Equal(a, b), '(a == b)')
186
188
  self.eq(NotEqual(a, b), '(a != b)')
@@ -191,12 +193,6 @@ class AnsiCExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
191
193
 
192
194
  self.eq(And(Equal(a, b), NotEqual(c, d)), '((a == b) && (c != d))')
193
195
  self.eq(Or(More(d, c), Less(b, a)), '((d > c) || (b < a))')
194
- self.eq(Not(Or(Number(1), Number(2))), '(!(1.0 || 2.0))')
195
- self.eq(Not(Less(Number(1), Number(2))), '(!(1.0 < 2.0))')
196
- self.eq(Not(Plus(Number(1), Number(2))), '(!(1.0 + 2.0))')
197
-
198
- self.eq(Equal(Equal(Number(0), Number(0)), Number(0)),
199
- '((0.0 == 0.0) == 0.0)')
200
196
 
201
197
  def test_conditionals(self):
202
198
 
@@ -206,11 +202,6 @@ class AnsiCExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
206
202
  self.eq(Piecewise(Equal(a, b), c, Equal(a, d), Number(3), Number(4)),
207
203
  '((a == b) ? c : ((a == d) ? 3.0 : 4.0))')
208
204
 
209
- # Extra parentheses if condition is not a condition
210
- self.eq(If(a, d, c), '((a) ? d : c)')
211
- self.eq(Piecewise(a, b, c, d, Number(4)),
212
- '((a) ? b : ((c) ? d : 4.0))')
213
-
214
205
  # Using if-then-else function
215
206
  w = self._target()
216
207
  w.set_lhs_function(lambda v: v.var().name())
@@ -329,9 +320,6 @@ class AnsiCExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
329
320
  c.add(If(Not(true), a, b), 20)
330
321
  c.add(If(Not(false), a, b), 10)
331
322
 
332
- c.add(If(Equal(Equal(Number(0), Number(0)), Number(0)), a, b), 20)
333
- c.add(If(Equal(Equal(Number(0), Number(0)), Number(1)), a, b), 10)
334
-
335
323
  c.add(Piecewise(true, Number(10), false, Number(20), Number(30)), 10)
336
324
  c.add(Piecewise(true, Number(10), true, Number(20), Number(30)), 10)
337
325
  c.add(Piecewise(false, Number(10), true, Number(20), Number(30)), 20)
@@ -72,11 +72,6 @@ class CppExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
72
72
  myokit.Number(4)),
73
73
  '((a == b) ? c : ((a == d) ? 3.0 : 4.0))')
74
74
 
75
- # Extra parentheses if condition is not a condition
76
- self.eq(myokit.If(a, d, c), '((a) ? d : c)')
77
- self.eq(myokit.Piecewise(a, b, c, d, myokit.Number(4)),
78
- '((a) ? b : ((c) ? d : 4.0))')
79
-
80
75
  # Using if-then-else function
81
76
  w = self._target()
82
77
  w.set_lhs_function(lambda v: v.var().name())
@@ -186,10 +186,12 @@ class CudaExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
186
186
  # Inherited from c-based
187
187
 
188
188
  a, b, c, d = self.abcd
189
- self.eq(And(a, b), '(a && b)')
190
- self.eq(Or(d, c), '(d || c)')
191
- self.eq(Not(And(a, b)), '(!(a && b))')
192
- self.eq(Not(c), '(!(c))')
189
+ p = Equal(a, b)
190
+ q = NotEqual(c, d)
191
+ self.eq(And(p, q), '((a == b) && (c != d))')
192
+ self.eq(Or(q, p), '((c != d) || (a == b))')
193
+ self.eq(Not(And(p, p)), '(!((a == b) && (a == b)))')
194
+ self.eq(Not(q), '(!(c != d))')
193
195
 
194
196
  self.eq(Equal(a, b), '(a == b)')
195
197
  self.eq(NotEqual(a, b), '(a != b)')
@@ -198,14 +200,9 @@ class CudaExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
198
200
  self.eq(MoreEqual(c, a), '(c >= a)')
199
201
  self.eq(LessEqual(b, d), '(b <= d)')
200
202
 
201
- self.eq(And(Equal(a, b), NotEqual(c, d)), '((a == b) && (c != d))')
202
203
  self.eq(Or(More(d, c), Less(b, a)), '((d > c) || (b < a))')
203
- self.eq(Not(Or(Number(1), Number(2))), '(!(1.0f || 2.0f))')
204
+ self.eq(Not(Equal(Number(1), Number(2))), '(!(1.0f == 2.0f))')
204
205
  self.eq(Not(Less(Number(1), Number(2))), '(!(1.0f < 2.0f))')
205
- self.eq(Not(Plus(Number(1), Number(2))), '(!(1.0f + 2.0f))')
206
-
207
- self.eq(Equal(Equal(Number(0), Number(0)), Number(0)),
208
- '((0.0f == 0.0f) == 0.0f)')
209
206
 
210
207
  def test_conditionals(self):
211
208
  # Inherited from c-based
@@ -216,11 +213,6 @@ class CudaExpressionWriterTest(myokit.tests.ExpressionWriterTestCase):
216
213
  self.eq(Piecewise(Equal(a, b), c, Equal(a, d), Number(3), Number(4)),
217
214
  '((a == b) ? c : ((a == d) ? 3.0f : 4.0f))')
218
215
 
219
- # If condition is not a condition
220
- self.eq(If(a, d, c), '((a) ? d : c)')
221
- self.eq(Piecewise(a, b, c, d, Number(4)),
222
- '((a) ? b : ((c) ? d : 4.0f))')
223
-
224
216
 
225
217
  if __name__ == '__main__':
226
218
  unittest.main()