myokit 1.37.1__tar.gz → 1.37.2__tar.gz

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 (416) hide show
  1. {myokit-1.37.1 → myokit-1.37.2}/LICENSE.txt +1 -1
  2. {myokit-1.37.1/myokit.egg-info → myokit-1.37.2}/PKG-INFO +17 -2
  3. {myokit-1.37.1 → myokit-1.37.2}/myokit/__init__.py +2 -2
  4. {myokit-1.37.1 → myokit-1.37.2}/myokit/_datalog.py +15 -6
  5. {myokit-1.37.1 → myokit-1.37.2}/myokit/_myokit_version.py +1 -1
  6. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/cvodessim.py +3 -3
  7. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/heka/__init__.py +4 -0
  8. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/heka/_patchmaster.py +128 -100
  9. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sbml/__init__.py +21 -1
  10. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sbml/_api.py +160 -6
  11. myokit-1.37.2/myokit/formats/sbml/_exporter.py +53 -0
  12. myokit-1.37.2/myokit/formats/sbml/_writer.py +355 -0
  13. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_exporters_run.py +3 -0
  14. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_sbml.py +57 -1
  15. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_sbml_api.py +90 -0
  16. myokit-1.37.2/myokit/tests/test_sbml_export.py +327 -0
  17. {myokit-1.37.1 → myokit-1.37.2/myokit.egg-info}/PKG-INFO +17 -2
  18. {myokit-1.37.1 → myokit-1.37.2}/myokit.egg-info/SOURCES.txt +3 -0
  19. {myokit-1.37.1 → myokit-1.37.2}/MANIFEST.in +0 -0
  20. {myokit-1.37.1 → myokit-1.37.2}/README.md +0 -0
  21. {myokit-1.37.1 → myokit-1.37.2}/myokit/__main__.py +0 -0
  22. {myokit-1.37.1 → myokit-1.37.2}/myokit/_aux.py +0 -0
  23. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/example.mmt +0 -0
  24. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/find.png +0 -0
  25. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-128.xpm +0 -0
  26. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-16.xpm +0 -0
  27. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-24.xpm +0 -0
  28. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-256.xpm +0 -0
  29. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-32.xpm +0 -0
  30. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-48.xpm +0 -0
  31. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-64.xpm +0 -0
  32. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer-96.xpm +0 -0
  33. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer.ico +0 -0
  34. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-datablock-viewer.png +0 -0
  35. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-128.xpm +0 -0
  36. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-16.xpm +0 -0
  37. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-24.xpm +0 -0
  38. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-256.xpm +0 -0
  39. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-32.xpm +0 -0
  40. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-48.xpm +0 -0
  41. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-64.xpm +0 -0
  42. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide-96.xpm +0 -0
  43. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide.ico +0 -0
  44. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/icon-ide.png +0 -0
  45. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/new.png +0 -0
  46. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/open.png +0 -0
  47. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/redo.png +0 -0
  48. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/run.png +0 -0
  49. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/save.png +0 -0
  50. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/gui/undo.png +0 -0
  51. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/myokit-datablock-viewer.desktop +0 -0
  52. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/myokit-datalog-viewer.desktop +0 -0
  53. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/myokit-ide.desktop +0 -0
  54. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/myokit.lang +0 -0
  55. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/x-abf.xml +0 -0
  56. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/x-cellml.xml +0 -0
  57. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/x-myokit.xml +0 -0
  58. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-lin/x-wcp.xml +0 -0
  59. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/install-win/menu.json +0 -0
  60. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/LICENSE +0 -0
  61. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/cvodes/cvodes.h +0 -0
  62. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/cvodes/cvodes_direct.h +0 -0
  63. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/cvodes/cvodes_ls.h +0 -0
  64. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/nvector/nvector_serial.h +0 -0
  65. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_config.h +0 -0
  66. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_dense.h +0 -0
  67. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_direct.h +0 -0
  68. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_export.h +0 -0
  69. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_iterative.h +0 -0
  70. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_linearsolver.h +0 -0
  71. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_matrix.h +0 -0
  72. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_nonlinearsolver.h +0 -0
  73. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_nvector.h +0 -0
  74. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_types.h +0 -0
  75. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sundials/sundials_version.h +0 -0
  76. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sunlinsol/sunlinsol_dense.h +0 -0
  77. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/include/sunmatrix/sunmatrix_dense.h +0 -0
  78. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/lib/sundials_cvodes.dll +0 -0
  79. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/lib/sundials_cvodes.lib +0 -0
  80. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/lib/sundials_nvecserial.dll +0 -0
  81. {myokit-1.37.1 → myokit-1.37.2}/myokit/_bin/sundials-win-vs/lib/sundials_nvecserial.lib +0 -0
  82. {myokit-1.37.1 → myokit-1.37.2}/myokit/_config.py +0 -0
  83. {myokit-1.37.1 → myokit-1.37.2}/myokit/_datablock.py +0 -0
  84. {myokit-1.37.1 → myokit-1.37.2}/myokit/_err.py +0 -0
  85. {myokit-1.37.1 → myokit-1.37.2}/myokit/_expressions.py +0 -0
  86. {myokit-1.37.1 → myokit-1.37.2}/myokit/_io.py +0 -0
  87. {myokit-1.37.1 → myokit-1.37.2}/myokit/_model_api.py +0 -0
  88. {myokit-1.37.1 → myokit-1.37.2}/myokit/_parsing.py +0 -0
  89. {myokit-1.37.1 → myokit-1.37.2}/myokit/_progress.py +0 -0
  90. {myokit-1.37.1 → myokit-1.37.2}/myokit/_protocol.py +0 -0
  91. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/__init__.py +0 -0
  92. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/cable.c +0 -0
  93. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/cable.py +0 -0
  94. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/cmodel.h +0 -0
  95. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/cmodel.py +0 -0
  96. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/compiler.c +0 -0
  97. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/compiler.py +0 -0
  98. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/cvodessim.c +0 -0
  99. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/differential.hpp +0 -0
  100. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/fiber_tissue.c +0 -0
  101. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/fiber_tissue.py +0 -0
  102. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/jacobian.cpp +0 -0
  103. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/jacobian.py +0 -0
  104. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/mcl.h +0 -0
  105. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/opencl.c +0 -0
  106. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/opencl.py +0 -0
  107. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/openclsim.c +0 -0
  108. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/openclsim.cl +0 -0
  109. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/openclsim.py +0 -0
  110. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/pacing.h +0 -0
  111. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/rhs.c +0 -0
  112. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/rhs.py +0 -0
  113. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/sundials.c +0 -0
  114. {myokit-1.37.1 → myokit-1.37.2}/myokit/_sim/sundials.py +0 -0
  115. {myokit-1.37.1 → myokit-1.37.2}/myokit/_system.py +0 -0
  116. {myokit-1.37.1 → myokit-1.37.2}/myokit/_unit.py +0 -0
  117. {myokit-1.37.1 → myokit-1.37.2}/myokit/float.py +0 -0
  118. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/__init__.py +0 -0
  119. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/ansic/__init__.py +0 -0
  120. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/ansic/_ewriter.py +0 -0
  121. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/ansic/_exporter.py +0 -0
  122. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/ansic/template/cable.c +0 -0
  123. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/ansic/template/euler.c +0 -0
  124. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/ansic/template/sim.c +0 -0
  125. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/axon/__init__.py +0 -0
  126. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/axon/_abf.py +0 -0
  127. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/axon/_atf.py +0 -0
  128. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/axon/_importer.py +0 -0
  129. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/__init__.py +0 -0
  130. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/_ewriter.py +0 -0
  131. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/_exporter.py +0 -0
  132. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/_importer.py +0 -0
  133. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v1/__init__.py +0 -0
  134. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v1/_api.py +0 -0
  135. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v1/_parser.py +0 -0
  136. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v1/_writer.py +0 -0
  137. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v2/__init__.py +0 -0
  138. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v2/_api.py +0 -0
  139. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v2/_parser.py +0 -0
  140. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cellml/v2/_writer.py +0 -0
  141. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/channelml/__init__.py +0 -0
  142. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/channelml/_importer.py +0 -0
  143. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cpp/__init__.py +0 -0
  144. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cpp/_ewriter.py +0 -0
  145. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cuda/__init__.py +0 -0
  146. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cuda/_ewriter.py +0 -0
  147. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cuda/_exporter.py +0 -0
  148. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/cuda/template/kernel.cu +0 -0
  149. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/diffsl/__init__.py +0 -0
  150. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/diffsl/_ewriter.py +0 -0
  151. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/diffsl/_exporter.py +0 -0
  152. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/easyml/__init__.py +0 -0
  153. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/easyml/_ewriter.py +0 -0
  154. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/easyml/_exporter.py +0 -0
  155. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/heka/_importer.py +0 -0
  156. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/html/__init__.py +0 -0
  157. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/html/_exporter.py +0 -0
  158. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/html/_flatten.py +0 -0
  159. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/latex/__init__.py +0 -0
  160. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/latex/_ewriter.py +0 -0
  161. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/latex/_exporter.py +0 -0
  162. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/mathml/__init__.py +0 -0
  163. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/mathml/_ewriter.py +0 -0
  164. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/mathml/_parser.py +0 -0
  165. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/__init__.py +0 -0
  166. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/_ewriter.py +0 -0
  167. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/_exporter.py +0 -0
  168. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/template/constants.m +0 -0
  169. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/template/ifthenelse.m +0 -0
  170. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/template/main.m +0 -0
  171. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/template/model.m +0 -0
  172. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/matlab/template/model_wrapper.m +0 -0
  173. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/__init__.py +0 -0
  174. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/_ewriter.py +0 -0
  175. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/_exporter.py +0 -0
  176. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/template/cable.c +0 -0
  177. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/template/kernel.cl +0 -0
  178. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/template/minilog.py +0 -0
  179. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/template/plot.py +0 -0
  180. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/opencl/template/test.sh +0 -0
  181. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/python/__init__.py +0 -0
  182. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/python/_ewriter.py +0 -0
  183. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/python/_exporter.py +0 -0
  184. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/python/template/sim.py +0 -0
  185. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sbml/_importer.py +0 -0
  186. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sbml/_parser.py +0 -0
  187. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/stan/__init__.py +0 -0
  188. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/stan/_ewriter.py +0 -0
  189. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/stan/_exporter.py +0 -0
  190. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/stan/template/cell.stan +0 -0
  191. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/stan/template/run.py +0 -0
  192. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sympy/__init__.py +0 -0
  193. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sympy/_ereader.py +0 -0
  194. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/sympy/_ewriter.py +0 -0
  195. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/wcp/__init__.py +0 -0
  196. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/wcp/_wcp.py +0 -0
  197. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/xml/__init__.py +0 -0
  198. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/xml/_exporter.py +0 -0
  199. {myokit-1.37.1 → myokit-1.37.2}/myokit/formats/xml/_split.py +0 -0
  200. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/__init__.py +0 -0
  201. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/datablock_viewer.py +0 -0
  202. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/datalog_viewer.py +0 -0
  203. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/explorer.py +0 -0
  204. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/ide.py +0 -0
  205. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/progress.py +0 -0
  206. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/source.py +0 -0
  207. {myokit-1.37.1 → myokit-1.37.2}/myokit/gui/vargrapher.py +0 -0
  208. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/__init__.py +0 -0
  209. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/deps.py +0 -0
  210. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/guess.py +0 -0
  211. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/hh.py +0 -0
  212. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/markov.py +0 -0
  213. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/multi.py +0 -0
  214. {myokit-1.37.1 → myokit-1.37.2}/myokit/lib/plots.py +0 -0
  215. {myokit-1.37.1 → myokit-1.37.2}/myokit/pacing.py +0 -0
  216. {myokit-1.37.1 → myokit-1.37.2}/myokit/pype.py +0 -0
  217. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/__init__.py +0 -0
  218. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/ansic_event_based_pacing.py +0 -0
  219. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/ansic_time_series_pacing.py +0 -0
  220. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/beeler-1977-model-compare-a.mmt +0 -0
  221. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/beeler-1977-model-compare-b.mmt +0 -0
  222. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/beeler-1977-model.mmt +0 -0
  223. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/beeler-1977-protocol.mmt +0 -0
  224. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/beeler-1977-script.mmt +0 -0
  225. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/beeler-1977-units.mmt +0 -0
  226. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/clancy-1999-fitting.mmt +0 -0
  227. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/conditional.mmt +0 -0
  228. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/cv1d.mmt +0 -0
  229. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/cv1d.zip +0 -0
  230. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/decker-2009.mmt +0 -0
  231. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/decker.model +0 -0
  232. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/dn-1985-normalised.mmt +0 -0
  233. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/dom-markov.mmt +0 -0
  234. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/abf-protocol.pro +0 -0
  235. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/abf-v1.abf +0 -0
  236. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/abf-v2.abf +0 -0
  237. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/LICENSE +0 -0
  238. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/br-1977-dot.cellml +0 -0
  239. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/br-1977.cellml +0 -0
  240. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/corrias.cellml +0 -0
  241. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/decker-2009.cellml +0 -0
  242. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/documentation.cellml +0 -0
  243. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/invalid-file.cellml +0 -0
  244. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/lr-1991-exported-1.cellml +0 -0
  245. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/cellml/lr-1991-exported-2.cellml +0 -0
  246. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-00-valid-file.channelml +0 -0
  247. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-01-wrong-root.channelml +0 -0
  248. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-02-no-channel-type.channelml +0 -0
  249. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-03-overlapping-name.channelml +0 -0
  250. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-04-no-cvr.channelml +0 -0
  251. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-05-two-cvrs.channelml +0 -0
  252. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-06-no-q10.channelml +0 -0
  253. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-07-three-transitions.channelml +0 -0
  254. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-08-no-closed-to-open.channelml +0 -0
  255. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-09-no-open-to-closed.channelml +0 -0
  256. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-10-tco-bad-expression.channelml +0 -0
  257. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-11-toc-bad-expression.channelml +0 -0
  258. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-12-no-steady-state.channelml +0 -0
  259. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-13-no-time-course.channelml +0 -0
  260. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-14-inf-bad-expression.channelml +0 -0
  261. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-15-tau-bad-expression.channelml +0 -0
  262. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-16-no-gates.channelml +0 -0
  263. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-17-invalid-name.channelml +0 -0
  264. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/channelml/ch-18-c-style-if.channelml +0 -0
  265. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/00004-sbml-l2v1-modified.xml +0 -0
  266. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/00004-sbml-l3v2-modified.xml +0 -0
  267. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/HodgkinHuxley.xml +0 -0
  268. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/LICENSE +0 -0
  269. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/model/00001-sbml-l3v2.xml +0 -0
  270. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/model/00004-sbml-l3v2.xml +0 -0
  271. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/model/01103-sbml-l3v2.xml +0 -0
  272. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/result/00001-results.csv +0 -0
  273. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/result/00004-results.csv +0 -0
  274. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/sbml/result/01103-results.csv +0 -0
  275. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/wcp-file-empty.wcp +0 -0
  276. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/formats/wcp-file.wcp +0 -0
  277. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-1-not-enough-files.zip +0 -0
  278. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-2-no-header.zip +0 -0
  279. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-3-no-data.zip +0 -0
  280. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-4-not-a-zip.zip +0 -0
  281. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-5-bad-data-type.zip +0 -0
  282. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-6-time-too-short.zip +0 -0
  283. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-7-0d-too-short.zip +0 -0
  284. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad1d-8-1d-too-short.zip +0 -0
  285. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-1-not-enough-files.zip +0 -0
  286. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-2-no-header.zip +0 -0
  287. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-3-no-data.zip +0 -0
  288. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-4-not-a-zip.zip +0 -0
  289. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-5-bad-data-type.zip +0 -0
  290. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-6-time-too-short.zip +0 -0
  291. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-7-0d-too-short.zip +0 -0
  292. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/bad2d-8-2d-too-short.zip +0 -0
  293. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-1-no-data.zip +0 -0
  294. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-2-no-structure.zip +0 -0
  295. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-3-not-a-zip.zip +0 -0
  296. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-4-invalid-n-fields.zip +0 -0
  297. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-5-invalid-data-size.zip +0 -0
  298. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-6-bad-data-type.zip +0 -0
  299. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/badlog-7-not-enough-data.zip +0 -0
  300. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/block1d.mmt +0 -0
  301. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/block2d.mmt +0 -0
  302. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/block2d.zip +0 -0
  303. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-1-empty.csv +0 -0
  304. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-10-just-spaces.csv +0 -0
  305. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-11-just-a-semicolon.csv +0 -0
  306. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-12-bad-header.csv +0 -0
  307. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-13-header-with-empty-1.csv +0 -0
  308. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-14-header-with-empty-2.csv +0 -0
  309. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-15-header-with-empty-3.csv +0 -0
  310. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-16-wrong-columns-in-data.csv +0 -0
  311. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-17-non-float-data.csv +0 -0
  312. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-18-duplicate-keys.csv +0 -0
  313. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-2-windows.csv +0 -0
  314. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-3-old-mac.csv +0 -0
  315. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-4-empty-lines.csv +0 -0
  316. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-5-semicolons.csv +0 -0
  317. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-6-open-string.csv +0 -0
  318. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-7-empty-lines-2.csv +0 -0
  319. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-8-unquoted-header.csv +0 -0
  320. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog-9-double-quoted-header.csv +0 -0
  321. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/datalog.csv +0 -0
  322. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/io/goodlog.zip +0 -0
  323. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/lr-1991-dep.mmt +0 -0
  324. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/lr-1991-fitting.mmt +0 -0
  325. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/lr-1991-testing.mmt +0 -0
  326. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/lr-1991.mmt +0 -0
  327. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/multi/beeler-1977-protocol.mmt +0 -0
  328. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/multi/beeler-1977-script.mmt +0 -0
  329. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/multi/beeler-no-name.mmt +0 -0
  330. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/multi/lr-1991.mmt +0 -0
  331. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/multi/not-a-model.csv +0 -0
  332. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/multi/subdir/beeler-no-name.mmt +0 -0
  333. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/data/noble-1962.mmt +0 -0
  334. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_aux.py +0 -0
  335. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cellml_v1_api.py +0 -0
  336. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cellml_v1_parser.py +0 -0
  337. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cellml_v1_writer.py +0 -0
  338. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cellml_v2_api.py +0 -0
  339. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cellml_v2_parser.py +0 -0
  340. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cellml_v2_writer.py +0 -0
  341. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_cmodel.py +0 -0
  342. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_compiler_detection.py +0 -0
  343. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_component.py +0 -0
  344. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_config.py +0 -0
  345. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_datablock.py +0 -0
  346. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_datalog.py +0 -0
  347. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_dependency_checking.py +0 -0
  348. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_expressions.py +0 -0
  349. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_float.py +0 -0
  350. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats.py +0 -0
  351. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_ansic.py +0 -0
  352. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_axon.py +0 -0
  353. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_cellml.py +0 -0
  354. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_channelml.py +0 -0
  355. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_cpp.py +0 -0
  356. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_cuda.py +0 -0
  357. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_diffsl.py +0 -0
  358. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_easyml.py +0 -0
  359. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_html.py +0 -0
  360. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_latex.py +0 -0
  361. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_mathml_content.py +0 -0
  362. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_mathml_presentation.py +0 -0
  363. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_matlab.py +0 -0
  364. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_opencl.py +0 -0
  365. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_python.py +0 -0
  366. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_stan.py +0 -0
  367. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_sympy.py +0 -0
  368. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_formats_wcp.py +0 -0
  369. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_io.py +0 -0
  370. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_jacobian_calculator.py +0 -0
  371. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_jacobian_tracer.py +0 -0
  372. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_lib_deps.py +0 -0
  373. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_lib_guess.py +0 -0
  374. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_lib_hh.py +0 -0
  375. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_lib_markov.py +0 -0
  376. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_lib_multi.py +0 -0
  377. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_lib_plots.py +0 -0
  378. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_meta.py +0 -0
  379. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_model.py +0 -0
  380. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_model_building.py +0 -0
  381. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_opencl_info.py +0 -0
  382. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_pacing_factory.py +0 -0
  383. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_pacing_system_c.py +0 -0
  384. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_pacing_system_py.py +0 -0
  385. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_parsing.py +0 -0
  386. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_progress_reporters.py +0 -0
  387. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_protocol.py +0 -0
  388. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_protocol_floating_point.py +0 -0
  389. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_protocol_time_series.py +0 -0
  390. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_pype.py +0 -0
  391. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_quantity.py +0 -0
  392. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_rhs_benchmarker.py +0 -0
  393. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_sbml_parser.py +0 -0
  394. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_1d.py +0 -0
  395. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_cvodes.py +0 -0
  396. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_cvodes_from_disk.py +0 -0
  397. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_fiber_tissue.py +0 -0
  398. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_log_interval.py +0 -0
  399. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_opencl.py +0 -0
  400. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_opencl_log_interval.py +0 -0
  401. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_opencl_vs_cvode.py +0 -0
  402. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_simulation_opencl_vs_sim1d.py +0 -0
  403. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_system_info.py +0 -0
  404. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_tools.py +0 -0
  405. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_unit.py +0 -0
  406. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_user_functions.py +0 -0
  407. {myokit-1.37.1 → myokit-1.37.2}/myokit/tests/test_variable.py +0 -0
  408. {myokit-1.37.1 → myokit-1.37.2}/myokit/tools.py +0 -0
  409. {myokit-1.37.1 → myokit-1.37.2}/myokit/units.py +0 -0
  410. {myokit-1.37.1 → myokit-1.37.2}/myokit.egg-info/dependency_links.txt +0 -0
  411. {myokit-1.37.1 → myokit-1.37.2}/myokit.egg-info/entry_points.txt +0 -0
  412. {myokit-1.37.1 → myokit-1.37.2}/myokit.egg-info/not-zip-safe +0 -0
  413. {myokit-1.37.1 → myokit-1.37.2}/myokit.egg-info/requires.txt +0 -0
  414. {myokit-1.37.1 → myokit-1.37.2}/myokit.egg-info/top_level.txt +0 -0
  415. {myokit-1.37.1 → myokit-1.37.2}/setup.cfg +0 -0
  416. {myokit-1.37.1 → myokit-1.37.2}/setup.py +0 -0
@@ -3,7 +3,7 @@ BSD 3-Clause License
3
3
  Copyright (c) 2011-2017 Maastricht University. All rights reserved.
4
4
  Copyright (c) 2017-2020 University of Oxford. All rights reserved.
5
5
  (University of Oxford means the Chancellor, Masters and Scholars of the University of Oxford, having an administrative office at Wellington Square, Oxford OX1 2JD, UK).
6
- Copyright (c) 2020-2024 University of Nottingham. All rights reserved.
6
+ Copyright (c) 2020-2025 University of Nottingham. All rights reserved.
7
7
 
8
8
  Redistribution and use in source and binary forms, with or without
9
9
  modification, are permitted provided that the following conditions are met:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: myokit
3
- Version: 1.37.1
3
+ Version: 1.37.2
4
4
  Summary: A modeling and simulation tool for cardiac cellular electrophysiology
5
5
  Home-page: http://myokit.org
6
6
  Author: Michael Clerx
@@ -22,13 +22,28 @@ Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
22
22
  Classifier: Topic :: Scientific/Engineering :: Physics
23
23
  Requires-Python: >=3.7
24
24
  Description-Content-Type: text/markdown
25
+ License-File: LICENSE.txt
26
+ Requires-Dist: configparser
27
+ Requires-Dist: lxml
28
+ Requires-Dist: matplotlib>=2.2
29
+ Requires-Dist: numpy
30
+ Requires-Dist: setuptools
25
31
  Provides-Extra: docs
32
+ Requires-Dist: sphinx>=1.7.4; extra == "docs"
26
33
  Provides-Extra: dev
34
+ Requires-Dist: coverage; extra == "dev"
35
+ Requires-Dist: flake8>=3; extra == "dev"
27
36
  Provides-Extra: optional
37
+ Requires-Dist: scipy; extra == "optional"
38
+ Requires-Dist: sympy; extra == "optional"
28
39
  Provides-Extra: gui
40
+ Requires-Dist: pyqt6; extra == "gui"
41
+ Requires-Dist: sip; extra == "gui"
29
42
  Provides-Extra: pyqt
43
+ Requires-Dist: pyqt6; extra == "pyqt"
44
+ Requires-Dist: sip; extra == "pyqt"
30
45
  Provides-Extra: pyside
31
- License-File: LICENSE.txt
46
+ Requires-Dist: pyside6; extra == "pyside"
32
47
 
33
48
  [![Ubuntu unit tests](https://github.com/myokit/myokit/actions/workflows/unit-tests-ubuntu.yml/badge.svg)](https://github.com/myokit/myokit/actions/workflows/unit-tests-ubuntu.yml)
34
49
  [![MacOS unit tests](https://github.com/myokit/myokit/actions/workflows/unit-tests-macos.yml/badge.svg)](https://github.com/myokit/myokit/actions/workflows/unit-tests-macos.yml)
@@ -79,7 +79,7 @@ Copyright (c) 2017-2020 University of Oxford. All rights reserved.
79
79
  (University of Oxford means the Chancellor, Masters and Scholars of the
80
80
  University of Oxford, having an administrative office at Wellington Square,
81
81
  Oxford OX1 2JD, UK).
82
- Copyright (c) 2020-2024 University of Nottingham. All rights reserved.
82
+ Copyright (c) 2020-2025 University of Nottingham. All rights reserved.
83
83
 
84
84
  Redistribution and use in source and binary forms, with or without
85
85
  modification, are permitted provided that the following conditions are met:
@@ -118,7 +118,7 @@ LICENSE_HTML = """
118
118
  <br />(University of Oxford means the Chancellor, Masters and Scholars of
119
119
  the University of Oxford, having an administrative office at Wellington
120
120
  Square, Oxford OX1 2JD, UK).
121
- <br />Copyright (c) 2020-2024 University of Nottingham. All rights
121
+ <br />Copyright (c) 2020-2025 University of Nottingham. All rights
122
122
  reserved.</br></p>
123
123
  <p>
124
124
  Redistribution and use in source and binary forms, with or without
@@ -329,23 +329,27 @@ class DataLog(OrderedDict):
329
329
  """
330
330
  Creates a copy of the log, split with the given ``period``.
331
331
 
332
- Split signals are given indexes so that "current" becomes "0.current",
333
- "1.current", "2.current", etc.
332
+ Split signals are given indexes so that ``current`` becomes
333
+ ``0.current``, ``1.current``, ``2.current``, etc.
334
334
 
335
335
  If the logs entries do not divide well by ``period``, the remainder
336
336
  will be ignored. This happens commonly due to rounding point errors (in
337
337
  which case the remainder is a single entry). To disable this behavior,
338
338
  set ``discard_remainder=False``.
339
+
340
+ To split a log into a list of logs, use :meth:`DataLog.split_periodic`.
339
341
  """
340
342
  # Note: Using closed intervals can lead to logs of unequal length, so
341
343
  # it should be disabled here to ensure a valid log
342
344
  logs = self.split_periodic(period, adjust=True, closed_intervals=False)
345
+
343
346
  # Discard remainder if present
344
347
  if discard_remainder:
345
348
  if len(logs) > 1:
346
349
  n = logs[0].length()
347
350
  if logs[-1].length() < n:
348
351
  logs = logs[:-1]
352
+
349
353
  # Create new log with folded data
350
354
  out = myokit.DataLog()
351
355
  out._time = self._time
@@ -1305,10 +1309,12 @@ class DataLog(OrderedDict):
1305
1309
 
1306
1310
  def split_periodic(self, period, adjust=False, closed_intervals=True):
1307
1311
  """
1308
- Splits this log into multiple logs, each covering an equal period of
1309
- time. For example a log covering the time span ``[0, 10000]`` can be
1310
- split with period ``1000`` to obtain ten logs covering ``[0, 1000]``,
1311
- ``[1000, 2000]`` etc.
1312
+ Splits this log into multiple logs, returning a list of
1313
+ :class:`DataLog` objects.
1314
+
1315
+ Each returned log covers an equal ``period`` of time. For example a log
1316
+ covering the time span ``[0, 10000]`` split with period ``1000`` will
1317
+ result in a list of ten logs ``[0, 1000]``, ``[1000, 2000]`` etc.
1312
1318
 
1313
1319
  The split log files can be returned as-is, or with the time variable's
1314
1320
  value adjusted so that all logs appear to cover the same span. To
@@ -1319,6 +1325,9 @@ class DataLog(OrderedDict):
1319
1325
  the duplication of some data points. To disable this behavior and
1320
1326
  return half-closed endpoints (containing only the left point), set
1321
1327
  ``closed_intervals`` to ``False``.
1328
+
1329
+ To return a single log with entries ``x`` split as ``x.0``, ``x.1``,
1330
+ etc., use :meth:`DataLog.fold`.
1322
1331
  """
1323
1332
  # Validate log before starting
1324
1333
  self.validate()
@@ -14,7 +14,7 @@ __release__ = True
14
14
  # incompatibility
15
15
  # - Changes to revision indicate bugfixes, tiny new features
16
16
  # - There is no significance to odd/even numbers
17
- __version_tuple__ = 1, 37, 1
17
+ __version_tuple__ = 1, 37, 2
18
18
 
19
19
  # String version of the version number
20
20
  __version__ = '.'.join([str(x) for x in __version_tuple__])
@@ -695,9 +695,9 @@ class Simulation(myokit.CModule):
695
695
  An optional fixed size log interval. Must be ``None`` if
696
696
  ``log_times`` is used. If both are ``None`` every step is logged.
697
697
  ``log_times``
698
- An optional set of pre-determined logging times. Must be ``None``
699
- if ``log_interval`` is used. If both are ``None`` every step is
700
- logged.
698
+ An optional sequence (e.g. a list or a numpy array) of
699
+ pre-determined logging times. Must be ``None`` if ``log_interval``
700
+ is used. If both are ``None`` every step is logged.
701
701
  ``sensitivities``
702
702
  An optional list-of-lists to append the calculated sensitivities
703
703
  to.
@@ -9,7 +9,10 @@ from ._patchmaster import ( # noqa
9
9
  AmplifierSeries,
10
10
  AmplifierState,
11
11
  AmplifierStateRecord,
12
+ CSlowRange,
12
13
  EndianAwareReader,
14
+ Filter1Setting,
15
+ Filter2Type,
13
16
  Group,
14
17
  NoSupportedDAChannelError,
15
18
  PatchMasterFile,
@@ -22,6 +25,7 @@ from ._patchmaster import ( # noqa
22
25
  Stimulus,
23
26
  StimulusChannel,
24
27
  StimulusFile,
28
+ StimulusFilterSetting,
25
29
  Sweep,
26
30
  Trace,
27
31
  TreeNode,
@@ -973,45 +973,50 @@ class Series(TreeNode, myokit.formats.SweepSource):
973
973
 
974
974
  # Add meta data
975
975
  log.meta['time'] = self._time.strftime(myokit.DATE_FORMAT)
976
- a = self.amplifier_state()
977
976
  t = self[0][0] if len(self) and len(self[0]) else None
978
- log.meta['current_gain_mV_per_pA'] = a.current_gain()
979
- log.meta['filter1'] = a.filter1_str()
980
- log.meta['filter2'] = a.filter2_str()
981
- log.meta['stimulus_filter'] = a.stimulus_filter_str()
982
- log.meta['ljp_correction_mV'] = a.ljp()
983
- log.meta['voltage_offset_mV'] = a.v_off()
984
- log.meta['holding_potential_mV'] = a.v_hold()
985
977
  if t is not None:
986
978
  log.meta['r_pipette_MOhm'] = t.r_pipette()
987
979
  log.meta['r_seal_MOhm'] = t.r_seal()
988
- if a.c_fast_enabled():
989
- log.meta['c_fast_compensation_enabled'] = 'true'
990
- log.meta['c_fast_pF'] = a.c_fast()
991
- log.meta['c_fast_tau_us'] = a.c_fast_tau()
992
- else:
993
- log.meta['c_fast_compensation_enabled'] = 'false'
994
- log.meta['c_slow_pF'] = a.c_slow()
995
- if a.c_slow_enabled():
996
- log.meta['c_slow_compensation_enabled'] = 'true'
997
- log.meta['c_slow_range'] = a.c_slow_range()
998
- css = a.c_slow_auto_settings()
999
- log.meta['c_slow_auto_amplitude_mV'] = css[0]
1000
- log.meta['c_slow_auto_cycles'] = css[1]
1001
- log.meta['c_slow_auto_timeout'] = css[2]
1002
- else:
1003
- log.meta['c_slow_compensation_enabled'] = 'false'
1004
- log.meta['r_series_MOhm'] = a.r_series()
1005
- if a.r_series_enabled():
1006
- log.meta['r_series_compensation_enabled'] = 'true'
1007
- log.meta['r_series_compensation_percent'] = round(
1008
- a.r_series_fraction() * 100, 1)
1009
- log.meta['r_series_compensation_tau_us'] = a.r_series_tau()
1010
- else:
1011
- log.meta['r_series_compensation_enabled'] = 'false'
980
+ a = self.amplifier_state()
981
+ amps = [a] if a is not None else self.amplifier_states()
982
+ for k, a in enumerate(amps):
983
+ pre = '' if len(amps) == 1 else f'amp{1 + k}_'
984
+ log.meta[f'{pre}current_gain_mV_per_pA'] = a.current_gain()
985
+ log.meta[f'{pre}filter1'] = a.filter1_str()
986
+ log.meta[f'{pre}filter2'] = a.filter2_str()
987
+ log.meta[f'{pre}stimulus_filter'] = a.stimulus_filter_str()
988
+ log.meta[f'{pre}ljp_correction_mV'] = a.ljp()
989
+ log.meta[f'{pre}voltage_offset_mV'] = a.v_off()
990
+ log.meta[f'{pre}holding_potential_mV'] = a.v_hold()
991
+ if a.c_fast_enabled():
992
+ log.meta[f'{pre}c_fast_compensation_enabled'] = 'true'
993
+ log.meta[f'{pre}c_fast_pF'] = a.c_fast()
994
+ else:
995
+ log.meta[f'{pre}c_fast_compensation_enabled'] = 'false'
996
+ log.meta[f'{pre}c_slow_pF'] = a.c_slow()
997
+ if a.c_slow_enabled():
998
+ log.meta[f'{pre}c_slow_compensation_enabled'] = 'true'
999
+ log.meta[f'{pre}c_slow_range'] = a.c_slow_range()
1000
+ css = a.c_slow_auto_settings()
1001
+ log.meta[f'{pre}c_slow_auto_amplitude_mV'] = css[0]
1002
+ log.meta[f'{pre}c_slow_auto_cycles'] = css[1]
1003
+ log.meta[f'{pre}c_slow_auto_timeout'] = css[2]
1004
+ else:
1005
+ log.meta[f'{pre}c_slow_compensation_enabled'] = 'false'
1006
+ log.meta[f'{pre}r_series_MOhm'] = a.r_series()
1007
+ if a.r_series_enabled():
1008
+ log.meta[f'{pre}r_series_compensation_enabled'] = 'true'
1009
+ log.meta[f'{pre}r_series_compensation_percent'] = round(
1010
+ a.r_series_fraction() * 100, 1)
1011
+ log.meta[f'{pre}r_series_compensation_tau_us'] = \
1012
+ a.r_series_tau()
1013
+ else:
1014
+ log.meta[f'{pre}r_series_compensation_enabled'] = 'false'
1012
1015
 
1013
1016
  # Add protocol to meta data
1014
1017
  stimulus = self.stimulus()
1018
+ log.meta['sampling_interval_ms'] = stimulus.sampling_interval() * 1000
1019
+ log.meta['sweep_count'] = stimulus.sweep_count()
1015
1020
  stimulus_channel = stimulus.supported_channel()
1016
1021
  if stimulus_channel is not None:
1017
1022
  log.meta['amplifier_mode'] = str(stimulus_channel.amplifier_mode())
@@ -1058,46 +1063,46 @@ class Series(TreeNode, myokit.formats.SweepSource):
1058
1063
 
1059
1064
  # Info from amplifier state
1060
1065
  a = self.amplifier_state()
1061
- out.append('Information from amplifier state:')
1062
- out.append(f' Current gain: {a.current_gain()} mV/pA')
1063
- out.append(f' Filter 1: {a.filter1_str()}')
1064
- out.append(f' Filter 2: {a.filter2_str()}')
1065
- out.append(f' Stimulus filter: {a.stimulus_filter_str()}')
1066
- # Voltage info
1067
- out.append(f' Holding potential: {a.v_hold()} mV')
1068
- if a.ljp():
1069
- out.append(f' LJP correction: {round(a.ljp(), 4)} mV')
1070
- else:
1071
- out.append(' LJP correction: no correction')
1072
- out.append(f' Voltage offset: {a.v_off()} mV')
1073
- # C fast
1074
- if a.c_fast_enabled():
1075
- out.append(f' C fast compensation: {a.c_fast()} pF,'
1076
- f' {round(a.c_fast_tau(), 4)} us')
1077
- else:
1078
- out.append(' C fast compensation: not enabled')
1079
- # C slow
1080
- if a.c_slow_enabled():
1081
- out.append(f' C slow compensation: {a.c_slow()} pF')
1082
- amp, cyc, tim = a.c_slow_auto_settings()
1083
- out.append(f' C slow auto settings: amplitude {amp} mV,'
1084
- f' cycles {cyc}, timeout {tim} s')
1085
- else:
1086
- out.append(' C slow compensation: not enabled')
1087
- # Rs comp
1088
- out.append(f' R series: {a.r_series()} MOhm')
1089
- if a.r_series_enabled():
1090
- p = round(a.r_series_fraction() * 100, 1)
1091
- q = round(a.r_series_tau(), 1)
1092
- out.append(f' R series compensation: {p} %, {q} us')
1093
- else:
1094
- out.append(' R series compensation: not enabled')
1066
+ amps = [a] if a is not None else self.amplifier_states()
1067
+ for k, a in enumerate(amps):
1068
+ out.append(f'Information from amplifier state {1 + k}:')
1069
+ out.append(f' Current gain: {a.current_gain()} mV/pA')
1070
+ out.append(f' Filter 1: {a.filter1_str()}')
1071
+ out.append(f' Filter 2: {a.filter2_str()}')
1072
+ out.append(f' Stimulus filter: {a.stimulus_filter_str()}')
1073
+ # Voltage info
1074
+ out.append(f' Holding potential: {a.v_hold()} mV')
1075
+ if a.ljp():
1076
+ out.append(f' LJP correction: {round(a.ljp(), 4)} mV')
1077
+ else:
1078
+ out.append(' LJP correction: no correction')
1079
+ out.append(f' Voltage offset: {a.v_off()} mV')
1080
+ # C fast
1081
+ if a.c_fast_enabled():
1082
+ out.append(f' C fast compensation: {a.c_fast()} pF,')
1083
+ else:
1084
+ out.append(' C fast compensation: not enabled')
1085
+ # C slow
1086
+ if a.c_slow_enabled():
1087
+ out.append(f' C slow compensation: {a.c_slow()} pF')
1088
+ amp, cyc, tim = a.c_slow_auto_settings()
1089
+ out.append(f' C slow auto settings: amplitude {amp} mV,'
1090
+ f' cycles {cyc}, timeout {tim} s')
1091
+ else:
1092
+ out.append(' C slow compensation: not enabled')
1093
+ # Rs comp
1094
+ out.append(f' R series: {a.r_series()} MOhm')
1095
+ if a.r_series_enabled():
1096
+ p = round(a.r_series_fraction() * 100, 1)
1097
+ q = round(a.r_series_tau(), 1)
1098
+ out.append(f' R series compensation: {p} %, {q} us')
1099
+ else:
1100
+ out.append(' R series compensation: not enabled')
1095
1101
 
1096
1102
  # Info from first trace
1097
1103
  if len(self) and len(self[0]):
1098
1104
  t = self[0][0]
1099
1105
  out.append('Information from first trace:')
1100
-
1101
1106
  out.append(f' Pipette resistance: {t.r_pipette()} MOhm')
1102
1107
  out.append(f' Seal resistance: {t.r_seal()} MOhm')
1103
1108
  out.append(f' Series resistance: {t.r_series()} MOhm')
@@ -1121,8 +1126,10 @@ class Series(TreeNode, myokit.formats.SweepSource):
1121
1126
  out.append('-' * 60)
1122
1127
  out.append(f'Stimulus "{stim.label()}"')
1123
1128
  out.append(f' {stim.sweep_count()} sweeps')
1124
- out.append(f' Delay between sweeps: {stim.sweep_interval()} s')
1125
- out.append(f' Sampling interval: {stim.sampling_interval()} s')
1129
+ out.append(' Delay between sweeps: '
1130
+ f'{stim.sweep_interval() * 1000} ms')
1131
+ out.append(' Sampling interval: '
1132
+ f'{stim.sampling_interval() * 1000} ms')
1126
1133
  for i, ch in enumerate(stim):
1127
1134
  out.append(f' Channel {i}, in {ch.unit()}, amplifier in'
1128
1135
  f' {ch.amplifier_mode()} mode')
@@ -1442,7 +1449,7 @@ class Trace(TreeNode):
1442
1449
  Returns the last (uncompensated) series resistance (MOhm) before
1443
1450
  acquiring the trace.
1444
1451
  """
1445
- return 1e-6 / self._g_series
1452
+ return 0 if self._g_series == 0 else 1e-6 / self._g_series
1446
1453
 
1447
1454
  def r_pipette(self):
1448
1455
  """
@@ -1597,6 +1604,9 @@ class Trace(TreeNode):
1597
1604
  # sOld3 = 295; (* BYTE *)
1598
1605
  #
1599
1606
  # sStimFilterHz = 296; (* LONGREAL *)
1607
+ # 2024-11-07 HEKA support says that sStimFilterHz is "antiquated", and this
1608
+ # value (10kHz=off or 100kHz=on) should be ignored.
1609
+ #
1600
1610
  # sRsTau = 304; (* LONGREAL *)
1601
1611
  # sDacToAdcDelay = 312; (* LONGREAL *)
1602
1612
  # sInputFilterTau = 320; (* LONGREAL *)
@@ -1659,7 +1669,7 @@ class AmplifierState:
1659
1669
  handle.seek(i + 64) # sCFastAmp2 = 64; (* LONGREAL *)
1660
1670
  self._cf_amp2 = reader.read1('d')
1661
1671
  handle.seek(i + 72) # sCFastTau = 72; (* LONGREAL *)
1662
- self._cf_tau = reader.read1('d')
1672
+ self._cf_tau2 = reader.read1('d')
1663
1673
  #handle.seek(i + 285) # sCCCFastOn = 285; (* BYTE *)
1664
1674
  #self._cf_enabled = bool(reader.read1('b'))
1665
1675
 
@@ -1699,21 +1709,20 @@ class AmplifierState:
1699
1709
  #handle.seek(i + 231) # sF2Mode = 231; (* BYTE *)
1700
1710
  #self._temp['sF2Mode'] = reader.read1('b')
1701
1711
 
1702
- # self._temp = {}
1703
- # handle.seek(i + 296) # sStimFilterHz = 296; (* LONGREAL *)
1704
- # print('STIM', reader.read1('d'))
1705
- # handle.seek(i + 320) # sInputFilterTau = 320; (* LONGREAL *)
1706
- # print('InputFilterTau', reader.read1('d'))
1707
- # self._temp['sInputFilterTau'] = reader.read1('d')
1708
- # handle.seek(i + 328) # sOutputFilterTau = 328; (* LONGREAL *)
1709
- # print('OutputFilterTau', reader.read1('d'))
1710
- # self._temp['sOutputFilterTau'] = reader.read1('d')
1711
- # handle.seek(i + 384) # sVmonFiltBandwidth = 384; (* LONGREAL *)
1712
- # self._temp['sVmonFiltBandwidth'] = reader.read1('d')
1713
- # handle.seek(i + 392) # sVmonFiltFrequency = 392; (* LONGREAL *)
1714
- # self._temp['sVmonFiltFrequency'] = reader.read1('d')
1715
- # handle.seek(i + 264) # sImon1Bandwidth = 264; (* LONGREAL *)
1716
- # self._temp['sImon1Bandwidth'] = reader.read1('d')
1712
+ #self._temp = {}
1713
+ #handle.seek(i + 320) # sInputFilterTau = 320; (* LONGREAL *)
1714
+ #print('InputFilterTau', reader.read1('d'))
1715
+ #self._temp['sInputFilterTau'] = reader.read1('d')
1716
+ #handle.seek(i + 328) # sOutputFilterTau = 328; (* LONGREAL *)
1717
+ #print('OutputFilterTau', reader.read1('d'))
1718
+ #self._temp['sOutputFilterTau'] = reader.read1('d')
1719
+ #handle.seek(i + 384) # sVmonFiltBandwidth = 384; (* LONGREAL *)
1720
+ #self._temp['sVmonFiltBandwidth'] = reader.read1('d')
1721
+ #handle.seek(i + 392) # sVmonFiltFrequency = 392; (* LONGREAL *)
1722
+ #self._temp['sVmonFiltFrequency'] = reader.read1('d')
1723
+ #print(self._temp)
1724
+ #handle.seek(i + 264) # sImon1Bandwidth = 264; (* LONGREAL *)
1725
+ #self._temp['sImon1Bandwidth'] = reader.read1('d')
1717
1726
 
1718
1727
  # Stimulus filter
1719
1728
  handle.seek(i + 282) # sStimFilterOn = 282; (* BYTE *)
@@ -1725,23 +1734,28 @@ class AmplifierState:
1725
1734
 
1726
1735
  HEKA amplifiers use a two-component fast capacitance cancellation, with
1727
1736
  an instantaneous part (component 1) and a delayed part (component 2).
1728
-
1729
- The "total" capacitance, e.g. the sum of components 1 and 2 is
1730
- returned.
1737
+ This method returns the sum of both values. Individual values can be
1738
+ obtained from :meth:`c_fast_detailed`.
1731
1739
  """
1732
1740
  # The total fast capacitance correction is a sum of two capacitances.
1733
1741
  # See the EPC-10 manual for details.
1734
1742
  return (self._cf_amp1 + self._cf_amp2) * 1e12
1735
1743
 
1736
- def c_fast_tau(self):
1744
+ def c_fast_detailed(self):
1737
1745
  """
1738
- Returns the time constant (in microseconds) used in fast capacitance
1739
- correction.
1746
+ Returns the detailed fast capacitance correction values:
1747
+ ``(c_fast1, c_fast2, tau_fast2)`` in (pF, pF, us).
1740
1748
 
1741
- This is the time constant for the non-instantaneous component of the
1742
- cancellation, see :meth:`c_fast`.
1749
+ Here ``c_fast1`` is the capacitance (pF) of the instantaneous component
1750
+ of cancellation, ``c_fast2`` is the capacitance (pF) of the delayed
1751
+ cancellation, and ``tau_fast2`` is a "tau value" (in microseconds)
1752
+ pertaining to the delayed component (the equivalent value for the
1753
+ instantaneous component is 0).
1743
1754
  """
1744
- return self._cf_tau * 1e6
1755
+ # The total fast capacitance correction is a sum of two capacitances.
1756
+ # See the EPC-10 manual for details.
1757
+ return (
1758
+ self._cf_amp1 * 1e12, self._cf_amp2 * 1e12, self._cf_tau2 * 1e6)
1745
1759
 
1746
1760
  def c_fast_enabled(self):
1747
1761
  """
@@ -1897,7 +1911,12 @@ class AmplifierState:
1897
1911
  return self._voff * 1e3
1898
1912
 
1899
1913
  def v_hold(self):
1900
- """ Returns the holding potential (in mV). """
1914
+ """
1915
+ Returns the holding potential (in mV).
1916
+
1917
+ This is the potential last set in the amplifier window, before any
1918
+ experiments were run.
1919
+ """
1901
1920
  return self._holding * 1e3
1902
1921
 
1903
1922
 
@@ -1933,7 +1952,7 @@ class Filter1Setting(enum.Enum):
1933
1952
 
1934
1953
  class Filter2Type(enum.Enum):
1935
1954
  """
1936
- Setting for filter 2, which is applied after filter 1.
1955
+ Filter type for filter 2, which is applied after filter 1.
1937
1956
 
1938
1957
  Unlike Filter 1, this filter can be disabled, and the frequency is set
1939
1958
  separately.
@@ -1956,7 +1975,11 @@ class Filter2Type(enum.Enum):
1956
1975
 
1957
1976
 
1958
1977
  class CSlowRange(enum.Enum):
1959
- """ Available options for slow capacitance cancelling range. """
1978
+ """
1979
+ Available options for slow capacitance cancelling range.
1980
+
1981
+ This doubles up as the on/off setting for slow capacitance cancellation.
1982
+ """
1960
1983
  OFF = 0
1961
1984
  pF30 = 1
1962
1985
  pF100 = 2
@@ -1975,12 +1998,17 @@ class CSlowRange(enum.Enum):
1975
1998
 
1976
1999
  class StimulusFilterSetting(enum.Enum):
1977
2000
  """
1978
- Setting for the stimulus filter.
1979
-
2001
+ Setting for the stimulus filter: 20 us (on, default), or 2 us (off).
1980
2002
 
1981
2003
  The stimulus filter is a 2-pole Bessel filter applied over the stimulus
1982
2004
  signal to reduce fast capacitative currents. It is applied to voltages, the
1983
2005
  manual is less clear whether it is applied to currents too.
2006
+
2007
+ The quoted values are stated to be the filter's "rise time", which is the
2008
+ time needed for the signal to go from 10% to 90% of its step response.
2009
+ However, measurements indicate real rise times are longer (approximately
2010
+ 40us in the 20us setting), so these values should be treated as nominal
2011
+ rather than actual results.
1984
2012
  """
1985
2013
  BW2 = 0
1986
2014
  BW20 = 1
@@ -16,9 +16,16 @@ from ._api import ( # noqa
16
16
  Species,
17
17
  SpeciesReference)
18
18
  from ._importer import SBMLImporter
19
+ from ._exporter import SBMLExporter
19
20
  from ._parser import ( # noqa
20
21
  SBMLParsingError,
21
- SBMLParser)
22
+ SBMLParser
23
+ )
24
+ from ._writer import ( # noqa
25
+ write_file,
26
+ write_string,
27
+ SBMLWriter,
28
+ )
22
29
 
23
30
 
24
31
  # Importers
@@ -33,5 +40,18 @@ def importers():
33
40
  """
34
41
  return dict(_importers)
35
42
 
43
+
36
44
  # Exporters
45
+ _exporters = {
46
+ 'sbml': SBMLExporter,
47
+ }
48
+
49
+
50
+ def exporters():
51
+ """
52
+ Returns a dict of all exporters available in this module.
53
+ """
54
+ return dict(_exporters)
55
+
56
+
37
57
  # Expression writers