morphio 3.3.10__tar.gz → 3.4.0__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 (336) hide show
  1. {morphio-3.3.10 → morphio-3.4.0}/.github/workflows/coverage_test.yaml +7 -2
  2. {morphio-3.3.10 → morphio-3.4.0}/.github/workflows/run-tests.yml +2 -1
  3. {morphio-3.3.10 → morphio-3.4.0}/CHANGELOG.md +30 -0
  4. {morphio-3.3.10/morphio.egg-info → morphio-3.4.0}/PKG-INFO +1 -1
  5. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_enums.cpp +4 -1
  6. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_misc.cpp +0 -1
  7. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_warnings_exceptions.cpp +1 -1
  8. {morphio-3.3.10 → morphio-3.4.0}/binds/python/generated/docstrings.h +21 -5
  9. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/enums.h +3 -1
  10. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/warning_handling.h +19 -2
  11. {morphio-3.3.10 → morphio-3.4.0/morphio.egg-info}/PKG-INFO +1 -1
  12. {morphio-3.3.10 → morphio-3.4.0}/morphio.egg-info/SOURCES.txt +2 -0
  13. {morphio-3.3.10 → morphio-3.4.0}/src/CMakeLists.txt +1 -0
  14. {morphio-3.3.10 → morphio-3.4.0}/src/enums.cpp +1 -0
  15. {morphio-3.3.10 → morphio-3.4.0}/src/error_message_generation.cpp +19 -3
  16. {morphio-3.3.10 → morphio-3.4.0}/src/error_message_generation.h +15 -3
  17. {morphio-3.3.10 → morphio-3.4.0}/src/mut/morphology.cpp +1 -8
  18. {morphio-3.3.10 → morphio-3.4.0}/src/mut/writer_asc.cpp +4 -2
  19. {morphio-3.3.10 → morphio-3.4.0}/src/mut/writer_hdf5.cpp +4 -3
  20. {morphio-3.3.10 → morphio-3.4.0}/src/mut/writer_swc.cpp +4 -3
  21. {morphio-3.3.10 → morphio-3.4.0}/src/mut/writer_utils.cpp +9 -0
  22. {morphio-3.3.10 → morphio-3.4.0}/src/mut/writer_utils.h +1 -0
  23. {morphio-3.3.10 → morphio-3.4.0}/src/properties.cpp +8 -14
  24. {morphio-3.3.10 → morphio-3.4.0}/src/readers/morphologyASC.cpp +8 -11
  25. morphio-3.4.0/src/readers/morphologySWC.cpp +545 -0
  26. morphio-3.4.0/src/readers/utils.cpp +81 -0
  27. morphio-3.4.0/src/readers/utils.h +26 -0
  28. {morphio-3.3.10 → morphio-3.4.0}/src/shared_utils.cpp +3 -1
  29. {morphio-3.3.10 → morphio-3.4.0}/src/vasc/properties.cpp +3 -6
  30. {morphio-3.3.10 → morphio-3.4.0}/src/warning_handling.cpp +4 -2
  31. morphio-3.3.10/src/readers/morphologySWC.cpp +0 -455
  32. {morphio-3.3.10 → morphio-3.4.0}/.clang-format +0 -0
  33. {morphio-3.3.10 → morphio-3.4.0}/.github/workflows/check-sdist.yml +0 -0
  34. {morphio-3.3.10 → morphio-3.4.0}/.github/workflows/clang_format_check.yaml +0 -0
  35. {morphio-3.3.10 → morphio-3.4.0}/.github/workflows/docstring_check.yaml +0 -0
  36. {morphio-3.3.10 → morphio-3.4.0}/.github/workflows/publish-sdist-wheels.yml +0 -0
  37. {morphio-3.3.10 → morphio-3.4.0}/.gitignore +0 -0
  38. {morphio-3.3.10 → morphio-3.4.0}/.gitmodules +0 -0
  39. {morphio-3.3.10 → morphio-3.4.0}/.readthedocs.yaml +0 -0
  40. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/CMakeLists.txt +0 -0
  41. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/CMakeLists.txt +0 -0
  42. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/cmake/gsl-lite-config-version.cmake.in +0 -0
  43. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/cmake/gsl-lite-config.cmake.in +0 -0
  44. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/gsl-lite.natvis +0 -0
  45. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl/gsl +0 -0
  46. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl/gsl-lite-vc6.hpp +0 -0
  47. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl/gsl-lite.h +0 -0
  48. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl/gsl-lite.hpp +0 -0
  49. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl-lite/gsl-lite.hpp +0 -0
  50. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl.h +0 -0
  51. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/GSL_LITE/include/gsl.hpp +0 -0
  52. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/CMake/HighFiveConfig.cmake.in +0 -0
  53. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/CMake/HighFiveTargetDeps.cmake +0 -0
  54. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/CMake/HighFiveTargetExport.cmake +0 -0
  55. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/CMake/HighFiveWarnings.cmake +0 -0
  56. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/CMake/config/TestHelpers.cmake +0 -0
  57. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/CMakeLists.txt +0 -0
  58. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/CMakeLists.txt +0 -0
  59. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/Doxyfile +0 -0
  60. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/DoxygenLayout.xml +0 -0
  61. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/developer_guide.md +0 -0
  62. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/doxygen-awesome-css/doxygen-awesome.css +0 -0
  63. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/doxygen-awesome-css/update_doxygen_awesome.sh +0 -0
  64. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/environment.yaml +0 -0
  65. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/installation.md +0 -0
  66. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/migration_guide.md +0 -0
  67. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example1_hdf5.cpp +0 -0
  68. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example1_highfive.cpp +0 -0
  69. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example3.cpp +0 -0
  70. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example6.cpp +0 -0
  71. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example_boost.cpp +0 -0
  72. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example_boost_ublas.cpp +0 -0
  73. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example_easy_h5py.py +0 -0
  74. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example_easy_highfive.cpp +0 -0
  75. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/example_props.cpp +0 -0
  76. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/examples.js +0 -0
  77. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/godbolt.org.ico +0 -0
  78. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/doc/poster/index.html +0 -0
  79. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Attribute.hpp +0 -0
  80. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5DataSet.hpp +0 -0
  81. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5DataSpace.hpp +0 -0
  82. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5DataType.hpp +0 -0
  83. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Easy.hpp +0 -0
  84. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Exception.hpp +0 -0
  85. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5File.hpp +0 -0
  86. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5FileDriver.hpp +0 -0
  87. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Group.hpp +0 -0
  88. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Object.hpp +0 -0
  89. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5PropertyList.hpp +0 -0
  90. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Reference.hpp +0 -0
  91. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Selection.hpp +0 -0
  92. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Utility.hpp +0 -0
  93. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Version.hpp +0 -0
  94. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/H5Version.hpp.in +0 -0
  95. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Annotate_traits.hpp +0 -0
  96. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Annotate_traits_misc.hpp +0 -0
  97. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Attribute_misc.hpp +0 -0
  98. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Converter_misc.hpp +0 -0
  99. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5DataSet_misc.hpp +0 -0
  100. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5DataType_misc.hpp +0 -0
  101. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Dataspace_misc.hpp +0 -0
  102. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Exception_misc.hpp +0 -0
  103. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5FileDriver_misc.hpp +0 -0
  104. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5File_misc.hpp +0 -0
  105. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Friends.hpp +0 -0
  106. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Inspector_decl.hpp +0 -0
  107. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Inspector_misc.hpp +0 -0
  108. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Iterables_misc.hpp +0 -0
  109. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Node_traits.hpp +0 -0
  110. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Node_traits_misc.hpp +0 -0
  111. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Object_misc.hpp +0 -0
  112. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Path_traits.hpp +0 -0
  113. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Path_traits_misc.hpp +0 -0
  114. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5PropertyList_misc.hpp +0 -0
  115. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5ReadWrite_misc.hpp +0 -0
  116. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Reference_misc.hpp +0 -0
  117. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Selection_misc.hpp +0 -0
  118. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Slice_traits.hpp +0 -0
  119. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Slice_traits_misc.hpp +0 -0
  120. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5Utils.hpp +0 -0
  121. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/H5_definitions.hpp +0 -0
  122. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5_wrapper.hpp +0 -0
  123. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5a_wrapper.hpp +0 -0
  124. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5d_wrapper.hpp +0 -0
  125. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5e_wrapper.hpp +0 -0
  126. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5f_wrapper.hpp +0 -0
  127. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5g_wrapper.hpp +0 -0
  128. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5i_wrapper.hpp +0 -0
  129. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5l_wrapper.hpp +0 -0
  130. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5o_wrapper.hpp +0 -0
  131. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5p_wrapper.hpp +0 -0
  132. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5r_wrapper.hpp +0 -0
  133. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5s_wrapper.hpp +0 -0
  134. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/h5t_wrapper.hpp +0 -0
  135. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/bits/string_padding.hpp +0 -0
  136. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/boost.hpp +0 -0
  137. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/eigen.hpp +0 -0
  138. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_Eigen.hpp +0 -0
  139. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_misc.hpp +0 -0
  140. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_opencv.hpp +0 -0
  141. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_public.hpp +0 -0
  142. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_scalar.hpp +0 -0
  143. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_vector.hpp +0 -0
  144. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/h5easy_bits/H5Easy_xtensor.hpp +0 -0
  145. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/half_float.hpp +0 -0
  146. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/HighFive/include/highfive/highfive.hpp +0 -0
  147. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/CMakeLists.txt +0 -0
  148. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/LICENSE +0 -0
  149. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/cmake/GhcHelper.cmake +0 -0
  150. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/cmake/config.cmake.in +0 -0
  151. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/include/ghc/filesystem.hpp +0 -0
  152. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/include/ghc/fs_fwd.hpp +0 -0
  153. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/include/ghc/fs_impl.hpp +0 -0
  154. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/include/ghc/fs_std.hpp +0 -0
  155. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/include/ghc/fs_std_fwd.hpp +0 -0
  156. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/ghc_filesystem/include/ghc/fs_std_impl.hpp +0 -0
  157. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/CMakeLists.txt +0 -0
  158. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/char_traits.hpp +0 -0
  159. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/debug.hpp +0 -0
  160. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/dot.hpp +0 -0
  161. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/enums.hpp +0 -0
  162. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/generate_cpp.hpp +0 -0
  163. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/generator.hpp +0 -0
  164. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/internals.hpp +0 -0
  165. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/iterator.hpp +0 -0
  166. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/licence_1_0.txt +0 -0
  167. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/lookup.hpp +0 -0
  168. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/match_results.hpp +0 -0
  169. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/memory_file.hpp +0 -0
  170. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/narrow.hpp +0 -0
  171. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/observer_ptr.hpp +0 -0
  172. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/parser.hpp +0 -0
  173. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/blocks.hpp +0 -0
  174. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/fold2.inc +0 -0
  175. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/fold4.inc +0 -0
  176. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/re_token.hpp +0 -0
  177. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/re_tokeniser.hpp +0 -0
  178. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/re_tokeniser_helper.hpp +0 -0
  179. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/re_tokeniser_state.hpp +0 -0
  180. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/scripts.hpp +0 -0
  181. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/table.inc +0 -0
  182. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tokeniser/unicode.hpp +0 -0
  183. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tree/end_node.hpp +0 -0
  184. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tree/iteration_node.hpp +0 -0
  185. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tree/leaf_node.hpp +0 -0
  186. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tree/node.hpp +0 -0
  187. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tree/selection_node.hpp +0 -0
  188. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/parser/tree/sequence_node.hpp +0 -0
  189. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/partition/charset.hpp +0 -0
  190. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/partition/equivset.hpp +0 -0
  191. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/rules.hpp +0 -0
  192. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/runtime_error.hpp +0 -0
  193. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/serialise.hpp +0 -0
  194. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/sm_to_csm.hpp +0 -0
  195. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/sm_traits.hpp +0 -0
  196. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/state_machine.hpp +0 -0
  197. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/stream_shared_iterator.hpp +0 -0
  198. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/string_token.hpp +0 -0
  199. {morphio-3.3.10 → morphio-3.4.0}/3rdparty/lexertl14/include/lexertl/utf_iterators.hpp +0 -0
  200. {morphio-3.3.10 → morphio-3.4.0}/AUTHORS.txt +0 -0
  201. {morphio-3.3.10 → morphio-3.4.0}/CMake/CodeCoverage.cmake +0 -0
  202. {morphio-3.3.10 → morphio-3.4.0}/CMake/CompilerFlags.cmake +0 -0
  203. {morphio-3.3.10 → morphio-3.4.0}/CMake/MorphIOConfig.cmake +0 -0
  204. {morphio-3.3.10 → morphio-3.4.0}/CMakeLists.txt +0 -0
  205. {morphio-3.3.10 → morphio-3.4.0}/CONTRIBUTING.md +0 -0
  206. {morphio-3.3.10 → morphio-3.4.0}/LICENSE.txt +0 -0
  207. {morphio-3.3.10 → morphio-3.4.0}/MANIFEST.in +0 -0
  208. {morphio-3.3.10 → morphio-3.4.0}/README.rst +0 -0
  209. {morphio-3.3.10 → morphio-3.4.0}/binds/python/CMakeLists.txt +0 -0
  210. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_enums.h +0 -0
  211. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_immutable.cpp +0 -0
  212. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_immutable.h +0 -0
  213. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_misc.h +0 -0
  214. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_mutable.cpp +0 -0
  215. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_mutable.h +0 -0
  216. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_vasculature.cpp +0 -0
  217. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_vasculature.h +0 -0
  218. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bind_warnings_exceptions.h +0 -0
  219. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bindings_utils.cpp +0 -0
  220. {morphio-3.3.10 → morphio-3.4.0}/binds/python/bindings_utils.h +0 -0
  221. {morphio-3.3.10 → morphio-3.4.0}/binds/python/generated/.clang-format +0 -0
  222. {morphio-3.3.10 → morphio-3.4.0}/binds/python/morphio.cpp +0 -0
  223. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/CMakeLists.txt +0 -0
  224. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/LICENSE +0 -0
  225. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/attr.h +0 -0
  226. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/buffer_info.h +0 -0
  227. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/cast.h +0 -0
  228. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/chrono.h +0 -0
  229. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/common.h +0 -0
  230. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/complex.h +0 -0
  231. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/class.h +0 -0
  232. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/common.h +0 -0
  233. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/descr.h +0 -0
  234. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/init.h +0 -0
  235. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/internals.h +0 -0
  236. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
  237. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/detail/typeid.h +0 -0
  238. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/eigen/common.h +0 -0
  239. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/eigen/matrix.h +0 -0
  240. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/eigen/tensor.h +0 -0
  241. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/eigen.h +0 -0
  242. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/embed.h +0 -0
  243. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/eval.h +0 -0
  244. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/functional.h +0 -0
  245. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/gil.h +0 -0
  246. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/gil_safe_call_once.h +0 -0
  247. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/iostream.h +0 -0
  248. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/numpy.h +0 -0
  249. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/operators.h +0 -0
  250. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/options.h +0 -0
  251. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/pybind11.h +0 -0
  252. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/pytypes.h +0 -0
  253. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/stl/filesystem.h +0 -0
  254. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/stl.h +0 -0
  255. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/stl_bind.h +0 -0
  256. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/type_caster_pyobject_ptr.h +0 -0
  257. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/include/pybind11/typing.h +0 -0
  258. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/FindCatch.cmake +0 -0
  259. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/FindEigen3.cmake +0 -0
  260. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/FindPythonLibsNew.cmake +0 -0
  261. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/JoinPaths.cmake +0 -0
  262. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/pybind11Common.cmake +0 -0
  263. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/pybind11NewTools.cmake +0 -0
  264. {morphio-3.3.10 → morphio-3.4.0}/binds/python/pybind11/tools/pybind11Tools.cmake +0 -0
  265. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/collection.h +0 -0
  266. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/dendritic_spine.h +0 -0
  267. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/endoplasmic_reticulum.h +0 -0
  268. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/errorMessages.h +0 -0
  269. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/exceptions.h +0 -0
  270. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/glial_cell.h +0 -0
  271. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mito_section.h +0 -0
  272. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mitochondria.h +0 -0
  273. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/morphology.h +0 -0
  274. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/dendritic_spine.h +0 -0
  275. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/endoplasmic_reticulum.h +0 -0
  276. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/glial_cell.h +0 -0
  277. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/mito_section.h +0 -0
  278. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/mitochondria.h +0 -0
  279. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/modifiers.h +0 -0
  280. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/morphology.h +0 -0
  281. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/section.h +0 -0
  282. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/soma.h +0 -0
  283. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/mut/writers.h +0 -0
  284. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/properties.h +0 -0
  285. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/section.h +0 -0
  286. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/section_base.h +0 -0
  287. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/section_iterators.hpp +0 -0
  288. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/soma.h +0 -0
  289. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/types.h +0 -0
  290. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/vasc/iterators.hpp +0 -0
  291. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/vasc/properties.h +0 -0
  292. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/vasc/section.h +0 -0
  293. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/vasc/vasculature.h +0 -0
  294. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/vector_types.h +0 -0
  295. {morphio-3.3.10 → morphio-3.4.0}/include/morphio/version.h +0 -0
  296. {morphio-3.3.10 → morphio-3.4.0}/morphio/__init__.py +0 -0
  297. {morphio-3.3.10 → morphio-3.4.0}/morphio/mut/__init__.py +0 -0
  298. {morphio-3.3.10 → morphio-3.4.0}/morphio/vasculature/__init__.py +0 -0
  299. {morphio-3.3.10 → morphio-3.4.0}/morphio.egg-info/dependency_links.txt +0 -0
  300. {morphio-3.3.10 → morphio-3.4.0}/morphio.egg-info/not-zip-safe +0 -0
  301. {morphio-3.3.10 → morphio-3.4.0}/morphio.egg-info/requires.txt +0 -0
  302. {morphio-3.3.10 → morphio-3.4.0}/morphio.egg-info/top_level.txt +0 -0
  303. {morphio-3.3.10 → morphio-3.4.0}/pyproject.toml +0 -0
  304. {morphio-3.3.10 → morphio-3.4.0}/setup.cfg +0 -0
  305. {morphio-3.3.10 → morphio-3.4.0}/setup.py +0 -0
  306. {morphio-3.3.10 → morphio-3.4.0}/src/collection.cpp +0 -0
  307. {morphio-3.3.10 → morphio-3.4.0}/src/dendritic_spine.cpp +0 -0
  308. {morphio-3.3.10 → morphio-3.4.0}/src/endoplasmic_reticulum.cpp +0 -0
  309. {morphio-3.3.10 → morphio-3.4.0}/src/errorMessages.cpp +0 -0
  310. {morphio-3.3.10 → morphio-3.4.0}/src/glial_cell.cpp +0 -0
  311. {morphio-3.3.10 → morphio-3.4.0}/src/mito_section.cpp +0 -0
  312. {morphio-3.3.10 → morphio-3.4.0}/src/mitochondria.cpp +0 -0
  313. {morphio-3.3.10 → morphio-3.4.0}/src/morphology.cpp +0 -0
  314. {morphio-3.3.10 → morphio-3.4.0}/src/mut/dendritic_spine.cpp +0 -0
  315. {morphio-3.3.10 → morphio-3.4.0}/src/mut/endoplasmic_reticulum.cpp +0 -0
  316. {morphio-3.3.10 → morphio-3.4.0}/src/mut/glial_cell.cpp +0 -0
  317. {morphio-3.3.10 → morphio-3.4.0}/src/mut/mito_section.cpp +0 -0
  318. {morphio-3.3.10 → morphio-3.4.0}/src/mut/mitochondria.cpp +0 -0
  319. {morphio-3.3.10 → morphio-3.4.0}/src/mut/modifiers.cpp +0 -0
  320. {morphio-3.3.10 → morphio-3.4.0}/src/mut/section.cpp +0 -0
  321. {morphio-3.3.10 → morphio-3.4.0}/src/mut/soma.cpp +0 -0
  322. {morphio-3.3.10 → morphio-3.4.0}/src/point_utils.cpp +0 -0
  323. {morphio-3.3.10 → morphio-3.4.0}/src/point_utils.h +0 -0
  324. {morphio-3.3.10 → morphio-3.4.0}/src/readers/NeurolucidaLexer.inc +0 -0
  325. {morphio-3.3.10 → morphio-3.4.0}/src/readers/morphologyASC.h +0 -0
  326. {morphio-3.3.10 → morphio-3.4.0}/src/readers/morphologyHDF5.cpp +0 -0
  327. {morphio-3.3.10 → morphio-3.4.0}/src/readers/morphologyHDF5.h +0 -0
  328. {morphio-3.3.10 → morphio-3.4.0}/src/readers/morphologySWC.h +0 -0
  329. {morphio-3.3.10 → morphio-3.4.0}/src/readers/vasculatureHDF5.cpp +0 -0
  330. {morphio-3.3.10 → morphio-3.4.0}/src/readers/vasculatureHDF5.h +0 -0
  331. {morphio-3.3.10 → morphio-3.4.0}/src/section.cpp +0 -0
  332. {morphio-3.3.10 → morphio-3.4.0}/src/shared_utils.hpp +0 -0
  333. {morphio-3.3.10 → morphio-3.4.0}/src/soma.cpp +0 -0
  334. {morphio-3.3.10 → morphio-3.4.0}/src/vasc/section.cpp +0 -0
  335. {morphio-3.3.10 → morphio-3.4.0}/src/vasc/vasculature.cpp +0 -0
  336. {morphio-3.3.10 → morphio-3.4.0}/src/version.cpp.in +0 -0
@@ -19,14 +19,19 @@ jobs:
19
19
  uses: actions/checkout@v4
20
20
  - name: Fetch repository
21
21
  run: git fetch --prune --unshallow
22
+
22
23
  - name: Get submodules
23
24
  run: git submodule update --init --force --recursive
25
+
24
26
  - name: Install packages
25
27
  run: |
26
28
  sudo apt-get ${{env.apt_options}} update -y
27
- sudo apt-get ${{env.apt_options}} install -y build-essential libhdf5-dev lcov
29
+ sudo apt-get ${{env.apt_options}} install -y build-essential libhdf5-dev lcov language-pack-de
28
30
  - name: Build and run unittests
29
- run: ci/coverage_test.sh
31
+ run: |
32
+ locale -a
33
+ ci/coverage_test.sh
34
+
30
35
  - name: Upload Coverage to Coveralls
31
36
  uses: coverallsapp/github-action@master
32
37
  with:
@@ -37,7 +37,7 @@ jobs:
37
37
  if: runner.os == 'Linux'
38
38
  run: |
39
39
  sudo apt-get ${{env.apt_options}} update -y
40
- sudo apt-get ${{env.apt_options}} install -y build-essential libhdf5-dev
40
+ sudo apt-get ${{env.apt_options}} install -y build-essential libhdf5-dev language-pack-de
41
41
 
42
42
  - name: Install packages on MacOS
43
43
  if: runner.os == 'macOS'
@@ -55,6 +55,7 @@ jobs:
55
55
  CC: ${{ matrix.compiler.CC }}
56
56
  CXX: ${{ matrix.compiler.CXX }}
57
57
  run: |
58
+ locale -a
58
59
  ./ci/python_test.sh
59
60
  ./ci/cpp_test.sh
60
61
  ./ci/cpp_test.sh "-DMORPHIO_USE_DOUBLE=ON"
@@ -1,3 +1,33 @@
1
+ v3.4.0
2
+ ======
3
+ Improvements:
4
+ * New SWC parser:
5
+ * handles `locale` correctly, so decimal numbers using comma are allowed
6
+ * ~800 line SWC parse time goes from 0.976 to 0.699
7
+ * Doesn't create changes to bifurcations at the root nodes of SWC files
8
+ * More strict Neuromorpho 3 point soma checks
9
+ * disallow repeated Sample IDs
10
+ * Follow https://swc-specification.readthedocs.io/en/latest/swc.html more closely
11
+ * Allow only positive integer Sample IDs
12
+ * Allow for the type of neurite to change at bifurcation points
13
+ * Allow Window style `End of Lines`
14
+ * allow trailing spaces on sample lines
15
+
16
+ * Since this is a large change to the SWC parser, the minor release was increased
17
+
18
+ v3.3.10
19
+ =======
20
+ * This is primarily so that 3.13 wheels exist before the new SWC parser is put into production.
21
+ * try to work around removal of older MSVC tools
22
+ * Remove Errorlevel::Info; it's not an error if it's only informative
23
+ * Update upload/download actions to v4.
24
+ * update HDF5 url
25
+ * Update HighFive to 2.10.0
26
+
27
+ v3.3.9
28
+ ======
29
+ * remove embarrassing debug print; Hat-tip SarahM
30
+
1
31
  v3.3.8
2
32
  ======
3
33
  * Make ThreePointSoma use relative tolerance (494)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: morphio
3
- Version: 3.3.10
3
+ Version: 3.4.0
4
4
  Summary: A neuron morphology IO library
5
5
  Home-page: https://github.com/BlueBrain/MorphIO/
6
6
  Author: Blue Brain Project, EPFL
@@ -70,6 +70,8 @@ void bind_enums(py::module& m) {
70
70
  .value("soma_sphere", morphio::enums::Option::SOMA_SPHERE)
71
71
  .value("no_duplicates", morphio::enums::Option::NO_DUPLICATES)
72
72
  .value("nrn_order", morphio::enums::Option::NRN_ORDER)
73
+ .value("allow_unifurcated_section_change",
74
+ morphio::enums::Option::ALLOW_UNIFURCATED_SECTION_CHANGE)
73
75
  .export_values();
74
76
 
75
77
 
@@ -95,7 +97,8 @@ void bind_enums(py::module& m) {
95
97
  .value("write_empty_morphology", morphio::enums::WRITE_EMPTY_MORPHOLOGY)
96
98
  .value("zero_diameter", morphio::enums::Warning::ZERO_DIAMETER)
97
99
  .value("soma_non_contour", morphio::enums::Warning::SOMA_NON_CONTOUR)
98
- .value("soma_non_cylinder_or_point", morphio::enums::Warning::SOMA_NON_CYLINDER_OR_POINT);
100
+ .value("soma_non_cylinder_or_point", morphio::enums::Warning::SOMA_NON_CYLINDER_OR_POINT)
101
+ .value("type_changed_within_section", morphio::enums::Warning::SECTION_TYPE_CHANGED);
99
102
 
100
103
  py::enum_<morphio::enums::SomaType>(m, "SomaType", py::arithmetic())
101
104
  .value("SOMA_UNDEFINED", morphio::enums::SomaType::SOMA_UNDEFINED)
@@ -283,5 +283,4 @@ Note: This API is 'experimental', meaning it might change in the future.
283
283
  // Bind the lifetime of the `morphio::LoadUnordered` (1) to the
284
284
  // lifetime of the returned iterator (0).
285
285
  py::keep_alive<0, 1>());
286
-
287
286
  }
@@ -104,7 +104,7 @@ void bind_warnings_exceptions(py::module& m) {
104
104
  (void) C(WriteUndefinedSoma);
105
105
  (void) C(MitochondriaWriteNotSupported);
106
106
  (void) C(SomaNonContour);
107
- (void) C(SomaNonCynlinderOrPoint);
107
+ (void) C(SomaNonCylinderOrPoint);
108
108
  #undef QUOTE
109
109
  #undef C
110
110
  }
@@ -770,6 +770,18 @@ static const char *mkd_doc_morphio_SectionBuilderError = R"doc()doc";
770
770
 
771
771
  static const char *mkd_doc_morphio_SectionBuilderError_SectionBuilderError = R"doc()doc";
772
772
 
773
+ static const char *mkd_doc_morphio_SectionTypeChanged = R"doc()doc";
774
+
775
+ static const char *mkd_doc_morphio_SectionTypeChanged_SectionTypeChanged = R"doc()doc";
776
+
777
+ static const char *mkd_doc_morphio_SectionTypeChanged_errorLevel = R"doc()doc";
778
+
779
+ static const char *mkd_doc_morphio_SectionTypeChanged_lineNumber = R"doc()doc";
780
+
781
+ static const char *mkd_doc_morphio_SectionTypeChanged_msg = R"doc()doc";
782
+
783
+ static const char *mkd_doc_morphio_SectionTypeChanged_warning = R"doc()doc";
784
+
773
785
  static const char *mkd_doc_morphio_Section_Section = R"doc()doc";
774
786
 
775
787
  static const char *mkd_doc_morphio_Section_breadth_begin = R"doc(Breadth first iterator)doc";
@@ -862,15 +874,15 @@ static const char *mkd_doc_morphio_SomaNonContour_msg = R"doc()doc";
862
874
 
863
875
  static const char *mkd_doc_morphio_SomaNonContour_warning = R"doc()doc";
864
876
 
865
- static const char *mkd_doc_morphio_SomaNonCynlinderOrPoint = R"doc()doc";
877
+ static const char *mkd_doc_morphio_SomaNonCylinderOrPoint = R"doc()doc";
866
878
 
867
- static const char *mkd_doc_morphio_SomaNonCynlinderOrPoint_SomaNonCynlinderOrPoint = R"doc()doc";
879
+ static const char *mkd_doc_morphio_SomaNonCylinderOrPoint_SomaNonCylinderOrPoint = R"doc()doc";
868
880
 
869
- static const char *mkd_doc_morphio_SomaNonCynlinderOrPoint_errorLevel = R"doc()doc";
881
+ static const char *mkd_doc_morphio_SomaNonCylinderOrPoint_errorLevel = R"doc()doc";
870
882
 
871
- static const char *mkd_doc_morphio_SomaNonCynlinderOrPoint_msg = R"doc()doc";
883
+ static const char *mkd_doc_morphio_SomaNonCylinderOrPoint_msg = R"doc()doc";
872
884
 
873
- static const char *mkd_doc_morphio_SomaNonCynlinderOrPoint_warning = R"doc()doc";
885
+ static const char *mkd_doc_morphio_SomaNonCylinderOrPoint_warning = R"doc()doc";
874
886
 
875
887
  static const char *mkd_doc_morphio_Soma_Soma = R"doc()doc";
876
888
 
@@ -1094,6 +1106,8 @@ static const char *mkd_doc_morphio_enums_Option =
1094
1106
  R"doc(The list of modifier flags that can be passed when loading a
1095
1107
  morphology See morphio::mut::modifiers for more information)doc";
1096
1108
 
1109
+ static const char *mkd_doc_morphio_enums_Option_ALLOW_UNIFURCATED_SECTION_CHANGE = R"doc(Allow section type to change without bifurcation)doc";
1110
+
1097
1111
  static const char *mkd_doc_morphio_enums_Option_NO_DUPLICATES = R"doc(Skip duplicating points)doc";
1098
1112
 
1099
1113
  static const char *mkd_doc_morphio_enums_Option_NO_MODIFIER = R"doc(Read morphology as is without any modification)doc";
@@ -1211,6 +1225,8 @@ static const char *mkd_doc_morphio_enums_Warning_NO_SOMA_FOUND = R"doc(No soma f
1211
1225
 
1212
1226
  static const char *mkd_doc_morphio_enums_Warning_ONLY_CHILD = R"doc(Single child sections are not allowed in SWC format)doc";
1213
1227
 
1228
+ static const char *mkd_doc_morphio_enums_Warning_SECTION_TYPE_CHANGED = R"doc(In SWC, the type changed within a section, not post bifurcation)doc";
1229
+
1214
1230
  static const char *mkd_doc_morphio_enums_Warning_SOMA_NON_CONFORM = R"doc(Soma does not conform the three point soma spec from NeuroMorpho.org)doc";
1215
1231
 
1216
1232
  static const char *mkd_doc_morphio_enums_Warning_SOMA_NON_CONTOUR = R"doc(Soma must be a contour for ASC and H5)doc";
@@ -19,7 +19,8 @@ enum Option {
19
19
  TWO_POINTS_SECTIONS = 0x01, //!< Read sections only with 2 or more points
20
20
  SOMA_SPHERE = 0x02, //!< Interpret morphology soma as a sphere
21
21
  NO_DUPLICATES = 0x04, //!< Skip duplicating points
22
- NRN_ORDER = 0x08 //!< Order of neurites will be the same as in NEURON simulator
22
+ NRN_ORDER = 0x08, //!< Order of neurites will be the same as in NEURON simulator
23
+ ALLOW_UNIFURCATED_SECTION_CHANGE = 0x10 //!< Allow section type to change without bifurcation
23
24
  };
24
25
 
25
26
  /**
@@ -42,6 +43,7 @@ enum Warning {
42
43
  ZERO_DIAMETER, //!< Zero section diameter
43
44
  SOMA_NON_CONTOUR, //!< Soma must be a contour for ASC and H5
44
45
  SOMA_NON_CYLINDER_OR_POINT, //!< Soma must be stacked cylinders or a point
46
+ SECTION_TYPE_CHANGED, //!< In SWC, the type changed within a section, not post bifurcation
45
47
  };
46
48
 
47
49
  enum AnnotationType {
@@ -54,6 +54,23 @@ struct ZeroDiameter: public WarningMessage {
54
54
  uint64_t lineNumber;
55
55
  };
56
56
 
57
+ struct SectionTypeChanged: public WarningMessage {
58
+ SectionTypeChanged(std::string uri_, uint64_t lineNumber_)
59
+ : WarningMessage(std::move(uri_))
60
+ , lineNumber(lineNumber_) {}
61
+ morphio::enums::Warning warning() const final {
62
+ return Warning::SECTION_TYPE_CHANGED;
63
+ }
64
+ morphio::readers::ErrorLevel errorLevel = morphio::readers::ErrorLevel::WARNING;
65
+ std::string msg() const final {
66
+ static const char* description =
67
+ "Warning: Type changed within section, without bifurcation";
68
+ return "\n" + details::errorLink(uri, lineNumber, errorLevel) + description;
69
+ }
70
+
71
+ uint64_t lineNumber;
72
+ };
73
+
57
74
  struct DisconnectedNeurite: public WarningMessage {
58
75
  DisconnectedNeurite(std::string uri_, uint64_t lineNumber_)
59
76
  : WarningMessage(std::move(uri_))
@@ -243,8 +260,8 @@ struct SomaNonContour: public WarningMessage {
243
260
  }
244
261
  };
245
262
 
246
- struct SomaNonCynlinderOrPoint: public WarningMessage {
247
- SomaNonCynlinderOrPoint()
263
+ struct SomaNonCylinderOrPoint: public WarningMessage {
264
+ SomaNonCylinderOrPoint()
248
265
  : WarningMessage(std::string()) {}
249
266
  Warning warning() const final {
250
267
  return Warning::SOMA_NON_CYLINDER_OR_POINT;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: morphio
3
- Version: 3.3.10
3
+ Version: 3.4.0
4
4
  Summary: A neuron morphology IO library
5
5
  Home-page: https://github.com/BlueBrain/MorphIO/
6
6
  Author: Blue Brain Project, EPFL
@@ -324,6 +324,8 @@ src/readers/morphologyHDF5.cpp
324
324
  src/readers/morphologyHDF5.h
325
325
  src/readers/morphologySWC.cpp
326
326
  src/readers/morphologySWC.h
327
+ src/readers/utils.cpp
328
+ src/readers/utils.h
327
329
  src/readers/vasculatureHDF5.cpp
328
330
  src/readers/vasculatureHDF5.h
329
331
  src/vasc/properties.cpp
@@ -28,6 +28,7 @@ set(MORPHIO_SOURCES
28
28
  readers/morphologyASC.cpp
29
29
  readers/morphologyHDF5.cpp
30
30
  readers/morphologySWC.cpp
31
+ readers/utils.cpp
31
32
  readers/vasculatureHDF5.cpp
32
33
  section.cpp
33
34
  shared_utils.cpp
@@ -8,6 +8,7 @@
8
8
  namespace morphio {
9
9
  namespace enums {
10
10
 
11
+ /** Output stream formatter for SomaType */
11
12
  std::ostream& operator<<(std::ostream& os, const SomaType v) {
12
13
  switch (v) {
13
14
  case SOMA_SINGLE_POINT:
@@ -13,7 +13,7 @@ std::string errorMsg(const std::string& uri,
13
13
  const std::string& msg) {
14
14
  return "\n" + (uri.empty() ? "" : errorLink(uri, lineNumber, errorLevel) + "\n") + msg;
15
15
  }
16
- } // namespace
16
+ } // namespace
17
17
 
18
18
  // LCOV_EXCL_START { all the error messages are excluded from coverage
19
19
 
@@ -82,8 +82,14 @@ std::string ErrorMessages::ERROR_REPEATED_ID(const unsigned int originalId,
82
82
  newLineNumber,
83
83
  ErrorLevel::WARNING,
84
84
  "Repeated ID: " + std::to_string(originalId)) +
85
- "\nID already appears here: \n" +
86
- errorLink(_uri, originalLineNumber, ErrorLevel::WARNING);
85
+ "\nID already appears here: \n" + errorLink(_uri, originalLineNumber, ErrorLevel::WARNING);
86
+ }
87
+
88
+ std::string ErrorMessages::EARLY_END_OF_FILE(long unsigned int lineNumber) const {
89
+ return errorMsg(_uri,
90
+ lineNumber,
91
+ ErrorLevel::ERROR,
92
+ "The end of the file was reached before parsing finshed");
87
93
  }
88
94
 
89
95
  std::string ErrorMessages::ERROR_SELF_PARENT(const unsigned int lineNumber) const {
@@ -100,6 +106,13 @@ std::string ErrorMessages::ERROR_MISSING_MITO_PARENT(int mitoParentId) const {
100
106
  std::to_string(mitoParentId) + " does not exist.";
101
107
  }
102
108
 
109
+ std::string ErrorMessages::ERROR_NEGATIVE_ID(long unsigned int lineNumber) const {
110
+ return errorMsg(_uri,
111
+ lineNumber,
112
+ ErrorLevel::WARNING,
113
+ "The ID assigned to this line is negative");
114
+ }
115
+
103
116
  ////////////////////////////////////////////////////////////////////////////////
104
117
  // NEUROLUCIDA
105
118
  ////////////////////////////////////////////////////////////////////////////////
@@ -157,6 +170,9 @@ std::string ErrorMessages::ERROR_UNCOMPATIBLE_FLAGS(morphio::Option flag1,
157
170
  ////////////////////////////////////////////////////////////////////////////////
158
171
  // WRITERS
159
172
  ////////////////////////////////////////////////////////////////////////////////
173
+ std::string ErrorMessages::ERROR_EMPTY_MORPHOLOGY() const {
174
+ return errorMsg(_uri, 0, ErrorLevel::ERROR, "Morphology is empty.");
175
+ }
160
176
 
161
177
  std::string ErrorMessages::ERROR_UNSUPPORTED_SECTION_TYPE(const SectionType& type) const {
162
178
  return ("Attempted to write unsupported section type: " + std::to_string(type) +
@@ -52,9 +52,7 @@ class ErrorMessages
52
52
  std::string ERROR_MULTIPLE_SOMATA(const std::vector<unsigned int>& lineNumbers) const;
53
53
 
54
54
  /** Missing section parent error message */
55
- std::string ERROR_MISSING_PARENT(unsigned int id,
56
- int parentId,
57
- unsigned int lineNumber) const;
55
+ std::string ERROR_MISSING_PARENT(unsigned int id, int parentId, unsigned int lineNumber) const;
58
56
 
59
57
  /** Bifurcating soma error message */
60
58
  std::string ERROR_SOMA_BIFURCATION(unsigned int sampleLineNumber,
@@ -71,12 +69,21 @@ class ErrorMessages
71
69
  /** Section self parent error message */
72
70
  std::string ERROR_SELF_PARENT(unsigned int lineNumber) const;
73
71
 
72
+ /** The end of the file was reached before parsing finshed */
73
+ std::string EARLY_END_OF_FILE(long unsigned int lineNumber) const;
74
+
74
75
  /** Undefined soma error message */
75
76
  std::string ERROR_NOT_IMPLEMENTED_UNDEFINED_SOMA(const std::string&) const;
76
77
 
77
78
  /** Missing mitochondria parent section error message */
78
79
  std::string ERROR_MISSING_MITO_PARENT(int mitoParentId) const;
79
80
 
81
+ ////////////////////////////////////////////////////////////////////////////////
82
+ // SWC
83
+ ////////////////////////////////////////////////////////////////////////////////
84
+ /** A negative ID is used in SWC */
85
+ std::string ERROR_NEGATIVE_ID(long unsigned int lineNumber) const;
86
+
80
87
  ////////////////////////////////////////////////////////////////////////////////
81
88
  // NEUROLUCIDA
82
89
  ////////////////////////////////////////////////////////////////////////////////
@@ -111,6 +118,9 @@ class ErrorMessages
111
118
  // WRITERS
112
119
  ////////////////////////////////////////////////////////////////////////////////
113
120
 
121
+ /** Morphology is empty */
122
+ std::string ERROR_EMPTY_MORPHOLOGY() const;
123
+
114
124
  /** Unsupported morphology section type error message */
115
125
  std::string ERROR_UNSUPPORTED_SECTION_TYPE(const enums::SectionType& type) const;
116
126
 
@@ -125,6 +135,7 @@ class ErrorMessages
125
135
 
126
136
  /** Can't write perimeter data to SWC, ASC error message */
127
137
  std::string ERROR_PERIMETER_DATA_NOT_WRITABLE();
138
+
128
139
  /** Single section child SWC error message */
129
140
  std::string ERROR_ONLY_CHILD_SWC_WRITER(unsigned int parentId) const;
130
141
 
@@ -136,6 +147,7 @@ class ErrorMessages
136
147
 
137
148
  /** Contour soma must have at least 3 points. */
138
149
  std::string ERROR_SOMA_INVALID_CONTOUR() const;
150
+
139
151
  private:
140
152
  std::string _uri;
141
153
  };
@@ -345,8 +345,7 @@ breadth_iterator Morphology::breadth_end() const {
345
345
  void Morphology::applyModifiers(unsigned int modifierFlags) {
346
346
  if (modifierFlags & NO_DUPLICATES & TWO_POINTS_SECTIONS) {
347
347
  const auto err = details::ErrorMessages(_uri);
348
- throw SectionBuilderError(
349
- err.ERROR_UNCOMPATIBLE_FLAGS(NO_DUPLICATES, TWO_POINTS_SECTIONS));
348
+ throw SectionBuilderError(err.ERROR_UNCOMPATIBLE_FLAGS(NO_DUPLICATES, TWO_POINTS_SECTIONS));
350
349
  }
351
350
 
352
351
  if (modifierFlags & SOMA_SPHERE) {
@@ -389,12 +388,6 @@ std::unordered_map<int, std::vector<unsigned int>> Morphology::connectivity() {
389
388
  }
390
389
 
391
390
  void Morphology::write(const std::string& filename) const {
392
- for (const auto& root : rootSections()) {
393
- if (root->points().size() < 2) {
394
- throw morphio::SectionBuilderError("Root sections must have at least 2 points");
395
- }
396
- }
397
-
398
391
  const size_t pos = filename.find_last_of('.');
399
392
  if (pos == std::string::npos) {
400
393
  throw UnknownFileType("Missing file extension.");
@@ -54,13 +54,14 @@ void asc(const Morphology& morph,
54
54
  const std::string& filename,
55
55
  std::shared_ptr<morphio::WarningHandler> handler) {
56
56
  if (details::emptyMorphology(morph, handler)) {
57
- return;
57
+ throw morphio::WriterError(morphio::details::ErrorMessages().ERROR_EMPTY_MORPHOLOGY());
58
58
  }
59
59
 
60
60
  details::validateContourSoma(morph, handler);
61
61
  details::checkSomaHasSameNumberPointsDiameters(*morph.soma());
62
62
  details::validateHasNoMitochondria(morph, handler);
63
63
  details::validateHasNoPerimeterData(morph);
64
+ details::validateRootPointsHaveTwoOrMorePoints(morph);
64
65
 
65
66
  std::ofstream myfile(filename);
66
67
 
@@ -80,7 +81,8 @@ void asc(const Morphology& morph,
80
81
  } else if (type == SECTION_APICAL_DENDRITE) {
81
82
  myfile << "( (Color Red)\n (Apical)\n";
82
83
  } else {
83
- throw WriterError(morphio::details::ErrorMessages().ERROR_UNSUPPORTED_SECTION_TYPE(type));
84
+ throw WriterError(
85
+ morphio::details::ErrorMessages().ERROR_UNSUPPORTED_SECTION_TYPE(type));
84
86
  }
85
87
  write_asc_section(myfile, section, 2);
86
88
  myfile << ")\n\n";
@@ -13,8 +13,9 @@
13
13
  #include <highfive/H5File.hpp>
14
14
  #include <highfive/H5Object.hpp>
15
15
 
16
- #include "../shared_utils.hpp"
17
16
  #include "../error_message_generation.h"
17
+ #include "../shared_utils.hpp"
18
+ #include "morphio/exceptions.h"
18
19
  #include "writer_utils.h"
19
20
 
20
21
  namespace {
@@ -151,11 +152,12 @@ void h5(const Morphology& morph,
151
152
  const std::string& filename,
152
153
  std::shared_ptr<morphio::WarningHandler> handler) {
153
154
  if (details::emptyMorphology(morph, handler)) {
154
- return;
155
+ throw morphio::WriterError(morphio::details::ErrorMessages().ERROR_EMPTY_MORPHOLOGY());
155
156
  }
156
157
 
157
158
  details::validateContourSoma(morph, handler);
158
159
  details::checkSomaHasSameNumberPointsDiameters(*morph.soma());
160
+ details::validateRootPointsHaveTwoOrMorePoints(morph);
159
161
 
160
162
  HighFive::File h5_file(filename,
161
163
  HighFive::File::ReadWrite | HighFive::File::Create |
@@ -169,7 +171,6 @@ void h5(const Morphology& morph,
169
171
 
170
172
  const std::vector<Point>& somaPoints = morph.soma()->points();
171
173
  const auto& somaDiameters = morph.soma()->diameters();
172
-
173
174
  for (unsigned int i = 0; i < somaPoints.size(); ++i) {
174
175
  raw_points.push_back(
175
176
  {somaPoints[i][0], somaPoints[i][1], somaPoints[i][2], somaDiameters[i]});
@@ -20,8 +20,8 @@
20
20
  #include <highfive/H5File.hpp>
21
21
  #include <highfive/H5Object.hpp>
22
22
 
23
- #include "../shared_utils.hpp"
24
23
  #include "../error_message_generation.h"
24
+ #include "../shared_utils.hpp"
25
25
  #include "writer_utils.h"
26
26
 
27
27
  namespace {
@@ -122,7 +122,7 @@ void validateSWCSoma(const morphio::mut::Morphology& morph,
122
122
  } else if (!(soma->type() == SomaType::SOMA_NEUROMORPHO_THREE_POINT_CYLINDERS ||
123
123
  soma->type() == SomaType::SOMA_CYLINDERS ||
124
124
  soma->type() == SomaType::SOMA_SINGLE_POINT)) {
125
- handler->emit(std::make_shared<morphio::SomaNonCynlinderOrPoint>());
125
+ handler->emit(std::make_shared<morphio::SomaNonCylinderOrPoint>());
126
126
  } else if (soma->type() == SomaType::SOMA_SINGLE_POINT && soma_points.size() != 1) {
127
127
  throw WriterError(ErrorMessages().ERROR_SOMA_INVALID_SINGLE_POINT());
128
128
  } else if (soma->type() == SomaType::SOMA_NEUROMORPHO_THREE_POINT_CYLINDERS &&
@@ -142,7 +142,8 @@ void swc(const Morphology& morph,
142
142
  const std::string& filename,
143
143
  std::shared_ptr<morphio::WarningHandler> handler) {
144
144
  if (details::emptyMorphology(morph, handler)) {
145
- return;
145
+ throw morphio::WriterError(
146
+ morphio::details::ErrorMessages(filename).ERROR_EMPTY_MORPHOLOGY());
146
147
  }
147
148
 
148
149
  const std::shared_ptr<Soma>& soma = morph.soma();
@@ -71,6 +71,15 @@ void validateHasNoMitochondria(const morphio::mut::Morphology& morph,
71
71
  }
72
72
  }
73
73
 
74
+ void validateRootPointsHaveTwoOrMorePoints(const morphio::mut::Morphology& morph) {
75
+ for (const auto& root : morph.rootSections()) {
76
+ if (root->points().size() < 2) {
77
+ throw morphio::RawDataError("Root sections must have at least 2 points");
78
+ }
79
+ }
80
+
81
+ }
82
+
74
83
  } // namespace details
75
84
  } // namespace writer
76
85
  } // namespace mut
@@ -22,6 +22,7 @@ void validateContourSoma(const morphio::mut::Morphology&,
22
22
  void validateHasNoPerimeterData(const morphio::mut::Morphology&);
23
23
  void validateHasNoMitochondria(const morphio::mut::Morphology&,
24
24
  std::shared_ptr<morphio::WarningHandler> handler);
25
+ void validateRootPointsHaveTwoOrMorePoints(const morphio::mut::Morphology& morph);
25
26
 
26
27
  } // namespace details
27
28
  } // namespace writer
@@ -74,10 +74,9 @@ PointLevel& PointLevel::operator=(const PointLevel& other) {
74
74
  }
75
75
 
76
76
  bool SectionLevel::diff(const SectionLevel& other) const {
77
- return !(this == &other ||
78
- (compare_section_structure(_sections, other._sections) &&
79
- morphio::property::compare(_sectionTypes, other._sectionTypes) &&
80
- morphio::property::compare(_children, other._children)));
77
+ return !(this == &other || (compare_section_structure(_sections, other._sections) &&
78
+ morphio::property::compare(_sectionTypes, other._sectionTypes) &&
79
+ morphio::property::compare(_children, other._children)));
81
80
  }
82
81
 
83
82
  bool SectionLevel::operator==(const SectionLevel& other) const {
@@ -136,9 +135,8 @@ MitochondriaPointLevel::MitochondriaPointLevel(
136
135
  }
137
136
 
138
137
  bool MitochondriaSectionLevel::diff(const MitochondriaSectionLevel& other) const {
139
- return !(this == &other ||
140
- (compare_section_structure(this->_sections, other._sections) &&
141
- morphio::property::compare(this->_children, other._children)));
138
+ return !(this == &other || (compare_section_structure(this->_sections, other._sections) &&
139
+ morphio::property::compare(this->_children, other._children)));
142
140
  }
143
141
 
144
142
  bool MitochondriaSectionLevel::operator==(const MitochondriaSectionLevel& other) const {
@@ -151,13 +149,9 @@ bool MitochondriaSectionLevel::operator!=(const MitochondriaSectionLevel& other)
151
149
 
152
150
  bool MitochondriaPointLevel::diff(const MitochondriaPointLevel& other) const {
153
151
  return !(this == &other ||
154
- (morphio::property::compare(
155
- this->_sectionIds, other._sectionIds) &&
156
- morphio::property::compare(this->_relativePathLengths,
157
- other._relativePathLengths)
158
- &&
159
- morphio::property::compare(
160
- this->_diameters, other._diameters)));
152
+ (morphio::property::compare(this->_sectionIds, other._sectionIds) &&
153
+ morphio::property::compare(this->_relativePathLengths, other._relativePathLengths) &&
154
+ morphio::property::compare(this->_diameters, other._diameters)));
161
155
  }
162
156
 
163
157
  bool MitochondriaPointLevel::operator==(const MitochondriaPointLevel& other) const {
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  #include "morphologyASC.h"
7
+ #include "utils.h"
7
8
 
8
9
  #include <morphio/mut/morphology.h>
9
10
  #include <morphio/mut/section.h>
@@ -22,12 +23,9 @@ namespace {
22
23
  Contain header info about the root S-exps
23
24
  **/
24
25
  struct Header {
25
- Header()
26
- : token(static_cast<Token>(+Token::STRING))
27
- , parent_id(-1) {}
28
- Token token;
26
+ Token token = static_cast<Token>(+Token::STRING);
29
27
  std::string label;
30
- int32_t parent_id;
28
+ int32_t parent_id = -1;
31
29
  };
32
30
 
33
31
  bool is_eof(Token type) {
@@ -84,15 +82,14 @@ class NeurolucidaParser
84
82
  std::tuple<Point, floatType> parse_point(NeurolucidaLexer& lex, bool is_marker) {
85
83
  lex.expect(Token::LPAREN, "Point should start in LPAREN");
86
84
  std::array<morphio::floatType, 4> point{}; // X,Y,Z,D
85
+ const auto& stn = morphio::getStringToNumber();
86
+
87
87
  for (unsigned int i = 0; i < 4; i++) {
88
+ const std::string s = lex.consume()->str();
88
89
  try {
89
- #ifdef MORPHIO_USE_DOUBLE
90
- point[i] = std::stod(lex.consume()->str());
91
- #else
92
- point[i] = std::stof(lex.consume()->str());
93
- #endif
90
+ point[i] = std::get<0>(stn.toFloat(s, 0));
94
91
  } catch (const std::invalid_argument&) {
95
- throw RawDataError(err_.ERROR_PARSING_POINT(lex.line_num(), lex.current()->str()));
92
+ throw RawDataError(err_.ERROR_PARSING_POINT(lex.line_num(), s));
96
93
  }
97
94
 
98
95
  // Markers can have an s-exp (X Y Z) without diameter