capsul 2.3.1__tar.gz → 2.3.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 (308) hide show
  1. {capsul-2.3.1/capsul.egg-info → capsul-2.3.2}/PKG-INFO +16 -2
  2. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/completion_engine_iteration.py +8 -1
  3. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/database_populse.py +1 -1
  4. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/afni.py +16 -0
  5. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/ants.py +16 -0
  6. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/axon.py +17 -0
  7. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/fom.py +3 -1
  8. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/freesurfer.py +16 -0
  9. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/fsl.py +17 -1
  10. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/matlab.py +45 -19
  11. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/python.py +16 -0
  12. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/spm.py +17 -2
  13. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/settings.py +31 -1
  14. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/test/test_capsul_engine.py +38 -32
  15. capsul-2.3.2/capsul/engine/write_engine_config.py +50 -0
  16. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/nipype.py +16 -18
  17. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/spm.py +22 -14
  18. {capsul-2.3.1 → capsul-2.3.2}/capsul/info.py +3 -3
  19. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_workflow.py +3 -2
  20. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline_workflow.py +38 -5
  21. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/process.py +9 -5
  22. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/runprocess.py +28 -14
  23. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/activation_inspector.py +1 -1
  24. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/matlab_config.py +1 -1
  25. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/spm_config.py +60 -16
  26. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/study_config.py +6 -6
  27. {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/fsl.py +1 -1
  28. {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/spm.py +34 -29
  29. {capsul-2.3.1 → capsul-2.3.2/capsul.egg-info}/PKG-INFO +16 -2
  30. {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/SOURCES.txt +1 -0
  31. {capsul-2.3.1 → capsul-2.3.2}/doc/source/conf.py +5 -5
  32. {capsul-2.3.1 → capsul-2.3.2}/doc/source/index.rst +4 -4
  33. {capsul-2.3.1 → capsul-2.3.2}/doc/source/user_guide_tree/index.rst +13 -0
  34. {capsul-2.3.1 → capsul-2.3.2}/AUTHOR +0 -0
  35. {capsul-2.3.1 → capsul-2.3.2}/LICENSE +0 -0
  36. {capsul-2.3.1 → capsul-2.3.2}/MANIFEST.in +0 -0
  37. {capsul-2.3.1 → capsul-2.3.2}/README.rst +0 -0
  38. {capsul-2.3.1 → capsul-2.3.2}/capsul/__init__.py +0 -0
  39. {capsul-2.3.1 → capsul-2.3.2}/capsul/__main__.py +0 -0
  40. {capsul-2.3.1 → capsul-2.3.2}/capsul/api.py +0 -0
  41. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/__init__.py +0 -0
  42. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/attributes_factory.py +0 -0
  43. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/attributes_schema.py +0 -0
  44. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/completion_engine.py +0 -0
  45. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/completion_engine_factory.py +0 -0
  46. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/fom_completion_engine.py +0 -0
  47. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/test/__init__.py +0 -0
  48. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/test/test_attributed_process.py +0 -0
  49. {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/test/test_fom_process.py +0 -0
  50. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/__init__.py +0 -0
  51. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/database.py +0 -0
  52. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/database_json.py +0 -0
  53. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/__init__.py +0 -0
  54. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/attributes.py +0 -0
  55. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/nipype.py +0 -0
  56. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/somaworkflow.py +0 -0
  57. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/run.py +0 -0
  58. {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/test/__init__.py +0 -0
  59. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/__init__.py +0 -0
  60. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/afni.py +0 -0
  61. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/ants.py +0 -0
  62. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/freesurfer.py +0 -0
  63. {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/fsl.py +0 -0
  64. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/__init__.py +0 -0
  65. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/__init__.py +0 -0
  66. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/cv_node.py +0 -0
  67. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/loo_node.py +0 -0
  68. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/map_node.py +0 -0
  69. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/reduce_node.py +0 -0
  70. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/strcat_node.py +0 -0
  71. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/strconv.py +0 -0
  72. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/json_io.py +0 -0
  73. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline.py +0 -0
  74. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_construction.py +0 -0
  75. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_nodes.py +0 -0
  76. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_tools.py +0 -0
  77. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/process_iteration.py +0 -0
  78. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/python_export.py +0 -0
  79. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/__init__.py +0 -0
  80. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/__init__.py +0 -0
  81. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/acpcorientation.py +0 -0
  82. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/aimsconverter.py +0 -0
  83. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/baladinnormalizationpipeline.py +0 -0
  84. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/baladinnormalizationtoaims.py +0 -0
  85. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/brainorientation.py +0 -0
  86. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/brainsegmentation.py +0 -0
  87. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/fslnormalization.py +0 -0
  88. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/fslnormalizationtoaims.py +0 -0
  89. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/greywhiteclassificationhemi.py +0 -0
  90. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/greywhitemesh.py +0 -0
  91. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/greywhitetopology.py +0 -0
  92. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/histoanalysis.py +0 -0
  93. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/importt1mri.py +0 -0
  94. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/morphologist.py +0 -0
  95. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization.py +0 -0
  96. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_aimsmiregister.py +0 -0
  97. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_baladin.py +0 -0
  98. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_fsl_reinit.py +0 -0
  99. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_t1_spm12_reinit.py +0 -0
  100. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_t1_spm8_reinit.py +0 -0
  101. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalizationskullstripped.py +0 -0
  102. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/pialmesh.py +0 -0
  103. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/reorientanatomy.py +0 -0
  104. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/scalpmesh.py +0 -0
  105. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/skullstripping.py +0 -0
  106. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/splitbrain.py +0 -0
  107. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/spmnormalization.py +0 -0
  108. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/spmsn3dtoaims.py +0 -0
  109. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcideeplabeling.py +0 -0
  110. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcigraph.py +0 -0
  111. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcigraphmorphometrybysubject.py +0 -0
  112. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabelling.py +0 -0
  113. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingann.py +0 -0
  114. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspam.py +0 -0
  115. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspamglobal.py +0 -0
  116. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspamlocal.py +0 -0
  117. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspammarkov.py +0 -0
  118. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulciskeleton.py +0 -0
  119. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/t1biascorrection.py +0 -0
  120. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/talairachtransformation.py +0 -0
  121. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/talairachtransformationfromnormalization.py +0 -0
  122. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_activation.py +0 -0
  123. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_complex_pipeline_activations.py +0 -0
  124. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_custom_nodes.py +0 -0
  125. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_double_switch.py +0 -0
  126. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_iterative_process.py +0 -0
  127. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_optional_output_switch.py +0 -0
  128. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline.py +0 -0
  129. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline_parameters.py +0 -0
  130. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline_with_temp.py +0 -0
  131. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_proc_with_outputs.py +0 -0
  132. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_process_iteration.py +0 -0
  133. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_qc_nodes.py +0 -0
  134. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_optional_output.py +0 -0
  135. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_pipeline.py +0 -0
  136. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_subpipeline.py +0 -0
  137. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_subpipeline_one.json +0 -0
  138. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_subpipeline_two.json +0 -0
  139. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_temporary.py +0 -0
  140. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/topological_sort.py +0 -0
  141. {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/xml.py +0 -0
  142. {capsul-2.3.1 → capsul-2.3.2}/capsul/plugins/__init__.py +0 -0
  143. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/__init__.py +0 -0
  144. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/nipype_process.py +0 -0
  145. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/__init__.py +0 -0
  146. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_load_from_description.py +0 -0
  147. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_nipype_wrap.py +0 -0
  148. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_pipeline.xml +0 -0
  149. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_runprocess.py +0 -0
  150. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_traits.py +0 -0
  151. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/xml_pipeline.xml +0 -0
  152. {capsul-2.3.1 → capsul-2.3.2}/capsul/process/xml.py +0 -0
  153. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/__init__.py +0 -0
  154. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/capsulview +0 -0
  155. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/main_window.py +0 -0
  156. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/pipeline_viewer_app.py +0 -0
  157. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/__init__.py +0 -0
  158. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/capsul.ui +0 -0
  159. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/change_view.png +0 -0
  160. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/config.png +0 -0
  161. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/controller.png +0 -0
  162. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/exit.png +0 -0
  163. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/help.png +0 -0
  164. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/icones.py +0 -0
  165. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/icones.qrc +0 -0
  166. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/inspect.png +0 -0
  167. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/logo.gif +0 -0
  168. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/logo.png +0 -0
  169. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/open.png +0 -0
  170. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/play.png +0 -0
  171. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/readme.txt +0 -0
  172. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/search.png +0 -0
  173. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/transfer.png +0 -0
  174. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/view_result.png +0 -0
  175. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/__init__.py +0 -0
  176. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/application.py +0 -0
  177. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/fill_treectrl.py +0 -0
  178. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/find_pipelines.py +0 -0
  179. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/window.py +0 -0
  180. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/__init__.py +0 -0
  181. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/board_widget.py +0 -0
  182. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/test/__init__.py +0 -0
  183. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/test/test_board_widget.py +0 -0
  184. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/__init__.py +0 -0
  185. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/attributed_process_widget.py +0 -0
  186. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/links_debugger.py +0 -0
  187. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_developer_view.py +0 -0
  188. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_developper_view.py +0 -0
  189. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_file_warning_widget.py +0 -0
  190. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_user_view.py +0 -0
  191. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/settings_editor.py +0 -0
  192. {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/viewer_widget.py +0 -0
  193. {capsul-2.3.1 → capsul-2.3.2}/capsul/run.py +0 -0
  194. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/__init__.py +0 -0
  195. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_pipeline_rst.py +0 -0
  196. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_pipeline_view.py +0 -0
  197. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_sphinx_layout.py +0 -0
  198. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_usecases_rst.py +0 -0
  199. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/layoutdocgen.py +0 -0
  200. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/load_pilots.py +0 -0
  201. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/pipelinedocgen.py +0 -0
  202. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/test/__init__.py +0 -0
  203. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/test/test_process_pipeline_doc.py +0 -0
  204. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/test/test_usercases_doc.py +0 -0
  205. {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/usecasesdocgen.py +0 -0
  206. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/__init__.py +0 -0
  207. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/__init__.py +0 -0
  208. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/afni_config.py +0 -0
  209. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/ants_config.py +0 -0
  210. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/attributes_config.py +0 -0
  211. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/brainvisa_config.py +0 -0
  212. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/fom_config.py +0 -0
  213. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/freesurfer_config.py +0 -0
  214. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/fsl_config.py +0 -0
  215. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/nipype_config.py +0 -0
  216. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/smartcaching_config.py +0 -0
  217. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/somaworkflow_config.py +0 -0
  218. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_utils.py +0 -0
  219. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/memory.py +0 -0
  220. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/process_instance.py +0 -0
  221. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/run.py +0 -0
  222. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/__init__.py +0 -0
  223. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_fsl_config.py +0 -0
  224. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_memory.py +0 -0
  225. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_run_in_study_config.py +0 -0
  226. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_run_process.py +0 -0
  227. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_soma_workflow.py +0 -0
  228. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_soma_workflow_with_kw.py +0 -0
  229. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_study_config_configuration.py +0 -0
  230. {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_study_config_fom.py +0 -0
  231. {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/__init__.py +0 -0
  232. {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/afni.py +0 -0
  233. {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/ants.py +0 -0
  234. {capsul-2.3.1 → capsul-2.3.2}/capsul/test/__init__.py +0 -0
  235. {capsul-2.3.1 → capsul-2.3.2}/capsul/test/__main__.py +0 -0
  236. {capsul-2.3.1 → capsul-2.3.2}/capsul/test/coverage.py +0 -0
  237. {capsul-2.3.1 → capsul-2.3.2}/capsul/test/test_capsul_modules_import.py +0 -0
  238. {capsul-2.3.1 → capsul-2.3.2}/capsul/test/test_capsul_notebooks.py +0 -0
  239. {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/__init__.py +0 -0
  240. {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/finder.py +0 -0
  241. {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/test/__init__.py +0 -0
  242. {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/test/test_utils.py +0 -0
  243. {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/version_utils.py +0 -0
  244. {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/dependency_links.txt +0 -0
  245. {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/requires.txt +0 -0
  246. {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/top_level.txt +0 -0
  247. {capsul-2.3.1 → capsul-2.3.2}/doc/Makefile +0 -0
  248. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/capsul_logo.svg +0 -0
  249. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap-responsive.css +0 -0
  250. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap-responsive.min.css +0 -0
  251. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap.css +0 -0
  252. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap.min.css +0 -0
  253. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/custom.css +0 -0
  254. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/find_read.png +0 -0
  255. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/js/bootstrap.js +0 -0
  256. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/js/bootstrap.min.js +0 -0
  257. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/pipeline_switch.png +0 -0
  258. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/workflow_switch.svg +0 -0
  259. {capsul-2.3.1 → capsul-2.3.2}/doc/source/_templates/layout.html +0 -0
  260. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/api.rst +0 -0
  261. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/attributes.rst +0 -0
  262. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/engine.rst +0 -0
  263. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/in_context.rst +0 -0
  264. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/index.rst +0 -0
  265. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/info.rst +0 -0
  266. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/pipeline.rst +0 -0
  267. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/plugins.rst +0 -0
  268. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/process.rst +0 -0
  269. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/qt_apps.rst +0 -0
  270. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/qt_gui.rst +0 -0
  271. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/sphinxext.rst +0 -0
  272. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/study_config.rst +0 -0
  273. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/subprocess.rst +0 -0
  274. {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/utils.rst +0 -0
  275. {capsul-2.3.1 → capsul-2.3.2}/doc/source/documentation.rst +0 -0
  276. {capsul-2.3.1 → capsul-2.3.2}/doc/source/installation.rst +0 -0
  277. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/LICENSE.txt +0 -0
  278. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/MANIFEST.in +0 -0
  279. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/README.txt +0 -0
  280. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/__init__.py +0 -0
  281. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/docscrape.py +0 -0
  282. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/docscrape_sphinx.py +0 -0
  283. {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/numpydoc.py +0 -0
  284. {capsul-2.3.1 → capsul-2.3.2}/doc/source/status.rst +0 -0
  285. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/capsul_tutorial.ipynb +0 -0
  286. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/capsul_tutorial.ipynb.in +0 -0
  287. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_controller1.jpg +0 -0
  288. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom1.jpg +0 -0
  289. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom1_compl.jpg +0 -0
  290. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom1_controller.jpg +0 -0
  291. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom2.jpg +0 -0
  292. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom2_compl.jpg +0 -0
  293. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_iter1.jpg +0 -0
  294. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline1.jpg +0 -0
  295. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline2.jpg +0 -0
  296. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline3.jpg +0 -0
  297. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline5.jpg +0 -0
  298. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline6.jpg +0 -0
  299. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline6b.jpg +0 -0
  300. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline7.jpg +0 -0
  301. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml1.jpg +0 -0
  302. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml1_controller.jpg +0 -0
  303. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml2.jpg +0 -0
  304. {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml2_controller.jpg +0 -0
  305. {capsul-2.3.1 → capsul-2.3.2}/doc/source/user_guide_tree/advanced_usage.rst +0 -0
  306. {capsul-2.3.1 → capsul-2.3.2}/doc/source/user_guide_tree/xml_spec.rst +0 -0
  307. {capsul-2.3.1 → capsul-2.3.2}/setup.cfg +0 -0
  308. {capsul-2.3.1 → capsul-2.3.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: capsul
3
- Version: 2.3.1
3
+ Version: 2.3.2
4
4
  Summary: CAPSUL
5
5
  Home-page: https://github.com/populse/capsul
6
6
  Author: Populse team
@@ -14,10 +14,24 @@ Classifier: Operating System :: OS Independent
14
14
  Classifier: Programming Language :: Python
15
15
  Classifier: Topic :: Scientific/Engineering
16
16
  Classifier: Topic :: Utilities
17
+ License-File: LICENSE
18
+ Requires-Dist: traits>=4.0
19
+ Requires-Dist: soma-base>=4.6.1
20
+ Requires-Dist: soma-workflow>=2.9.0
21
+ Requires-Dist: populse-db>=1.1.1
22
+ Requires-Dist: six>=1.13
23
+ Requires-Dist: PyYAML
17
24
  Provides-Extra: doc
25
+ Requires-Dist: sphinx>=1.0; extra == "doc"
26
+ Requires-Dist: numpy>=1.3; extra == "doc"
18
27
  Provides-Extra: database
28
+ Requires-Dist: populse_db; extra == "database"
19
29
  Provides-Extra: nipype
20
- License-File: LICENSE
30
+ Requires-Dist: numpy>=1.3; extra == "nipype"
31
+ Requires-Dist: scipy>=0.7; extra == "nipype"
32
+ Requires-Dist: nibabel>=1.0; extra == "nipype"
33
+ Requires-Dist: networkx>=1.0; extra == "nipype"
34
+ Requires-Dist: nipype==0.10.0; extra == "nipype"
21
35
 
22
36
 
23
37
  ========
@@ -247,12 +247,19 @@ class ProcessCompletionEngineIteration(ProcessCompletionEngine):
247
247
  value = getattr(process.process, parameter)
248
248
  iterative_parameters[parameter].append(value)
249
249
  self.completion_progress = it_step + 1
250
- for parameter, values in six.iteritems(iterative_parameters):
250
+ for parameter, values in iterative_parameters.items():
251
251
  try:
252
252
  setattr(process, parameter, values)
253
253
  except Exception as e:
254
254
  print('assign iteration parameter', parameter, ':\n', e,
255
255
  file=sys.stderr)
256
+ for parameter in parameters:
257
+ try:
258
+ value = getattr(process.process, parameter)
259
+ setattr(process, parameter, value)
260
+ except Exception as e:
261
+ print('assign parameter', parameter, ':\n', e,
262
+ file=sys.stderr)
256
263
 
257
264
 
258
265
  def complete_iteration_step(self, step):
@@ -14,7 +14,7 @@ class PopulseDBEngine(DatabaseEngine):
14
14
  self.db = Database(database_engine)
15
15
  with self.db as dbs:
16
16
  if not dbs.get_collection('path_metadata'):
17
- # Create the schema if it does not exists
17
+ # Create the schema if it does not exist
18
18
  dbs.add_collection('named_directory', 'name')
19
19
  dbs.add_field('named_directory', 'path', 'string')
20
20
 
@@ -22,6 +22,22 @@ def init_settings(capsul_engine):
22
22
  'afni'})
23
23
 
24
24
 
25
+ def check_notably_invalid_config(conf):
26
+ '''
27
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
28
+
29
+ Returns
30
+ -------
31
+ invalid: list
32
+ list of invalid config keys
33
+ '''
34
+ invalid = []
35
+ for k in ('directory', ):
36
+ if getattr(conf, k, None) is None:
37
+ invalid.append(k)
38
+ return invalid
39
+
40
+
25
41
  def activate_configurations():
26
42
  '''
27
43
  Activate the AFNI module (set env variables) from the global configurations,
@@ -22,6 +22,22 @@ def init_settings(capsul_engine):
22
22
  'ants'})
23
23
 
24
24
 
25
+ def check_notably_invalid_config(conf):
26
+ '''
27
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
28
+
29
+ Returns
30
+ -------
31
+ invalid: list
32
+ list of invalid config keys
33
+ '''
34
+ invalid = []
35
+ for k in ('directory', ):
36
+ if getattr(conf, k, None) is None:
37
+ invalid.append(k)
38
+ return invalid
39
+
40
+
25
41
  def activate_configurations():
26
42
  '''
27
43
  Activate the ANTS module (set env variables) from the global configurations,
@@ -59,6 +59,23 @@ def check_configurations():
59
59
  return 'Axon shared_directory is not found'
60
60
  return None
61
61
 
62
+
63
+ def check_notably_invalid_config(conf):
64
+ '''
65
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
66
+
67
+ Returns
68
+ -------
69
+ invalid: list
70
+ list of invalid config keys
71
+ '''
72
+ invalid = []
73
+ for k in ('shared_directory', ):
74
+ if getattr(conf, k, None) is None:
75
+ invalid.append(k)
76
+ return invalid
77
+
78
+
62
79
  def complete_configurations():
63
80
  '''
64
81
  Try to automatically set or complete the capsul.engine.configurations for
@@ -88,7 +88,9 @@ def init_settings(capsul_engine):
88
88
 
89
89
 
90
90
  def config_dependencies(config):
91
- return {'axon': 'any', 'spm': 'any', 'attributes': 'any'}
91
+ return {'axon': 'any',
92
+ #'spm': 'any',
93
+ 'attributes': 'any'}
92
94
 
93
95
 
94
96
  def config_updated(capsul_engine, environment, param=None, value=None):
@@ -46,6 +46,22 @@ def check_configurations():
46
46
  return None
47
47
 
48
48
 
49
+ def check_notably_invalid_config(conf):
50
+ '''
51
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
52
+
53
+ Returns
54
+ -------
55
+ invalid: list
56
+ list of invalid config keys
57
+ '''
58
+ invalid = []
59
+ for k in ('setup', 'subjects_dir'):
60
+ if getattr(conf, k, None) is None:
61
+ invalid.append(k)
62
+ return invalid
63
+
64
+
49
65
  def complete_configurations():
50
66
  '''
51
67
  Try to automatically set or complete the capsul.engine.configurations for
@@ -47,12 +47,28 @@ def check_configurations():
47
47
  if fsl_prefix:
48
48
  return 'FSL configuration must either use config or prefix but not both'
49
49
  if not osp.exists(fsl_config):
50
- return 'File "%s" does not exists' % fsl_config
50
+ return 'File "%s" does not exist' % fsl_config
51
51
  if not fsl_config.endswith('fsl.sh'):
52
52
  return 'File "%s" is not a path to fsl.sh script' % fsl_config
53
53
  return None
54
54
 
55
55
 
56
+ def check_notably_invalid_config(conf):
57
+ '''
58
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
59
+
60
+ Returns
61
+ -------
62
+ invalid: list
63
+ list of invalid config keys
64
+ '''
65
+ invalid = []
66
+ for k in ('directory', 'config'):
67
+ if getattr(conf, k, None) is None:
68
+ invalid.append(k)
69
+ return invalid
70
+
71
+
56
72
  def complete_configurations():
57
73
  '''
58
74
  Try to automatically set or complete the capsul.engine.configurations for FSL.
@@ -28,13 +28,37 @@ def check_configurations():
28
28
  '''
29
29
  matlab_executable = capsul.engine.configurations.get(
30
30
  'capsul.engine.module.matlab', {}).get('executable')
31
- if not matlab_executable:
32
- return 'matlab.executable is not defined'
33
- if not os.path.exists(matlab_executable):
31
+ mcr = capsul.engine.configurations.get(
32
+ 'capsul.engine.module.matlab', {}).get('mcr_directory')
33
+ if not matlab_executable and not mcr:
34
+ return \
35
+ 'both matlab.executable and matlab.mcr_directory are not defined'
36
+ if matlab_executable and not os.path.exists(matlab_executable):
34
37
  return 'Matlab executable is defined as "%s" but this path does not exist' % matlab_executable
35
38
  return None
36
39
 
37
40
 
41
+ def check_notably_invalid_config(conf):
42
+ '''
43
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
44
+
45
+ Returns
46
+ -------
47
+ invalid: list
48
+ list of invalid config keys
49
+ '''
50
+ invalid = []
51
+ for k in ('executable', 'mcr_directory'):
52
+ if getattr(conf, k, None) is None:
53
+ invalid.append(k)
54
+ if len(invalid) == 1:
55
+ # if one of the paths is filled, then it should be OK.
56
+ # however it may depend on uses (SPM standalone needs mcr_directory,
57
+ # for instance)
58
+ return []
59
+ return invalid
60
+
61
+
38
62
  def edition_widget(engine, environment, config_id='matlab'):
39
63
  ''' Edition GUI for matlab config - see
40
64
  :class:`~capsul.qt_gui.widgets.settings_editor.SettingsEditor`
@@ -62,22 +86,24 @@ def edition_widget(engine, environment, config_id='matlab'):
62
86
  session.new_config(config_id, widget.environment, values)
63
87
  else:
64
88
  for k in ('executable', 'mcr_directory', ):
65
- if (k == 'mcr_directory' and
66
- values[k] and
67
- not os.path.isdir(values[k])):
68
- raise NotADirectoryError('\nMatlab mcr_directory '
69
- 'was not updated:\n{} is '
70
- 'not existing!'.format(
71
- values[k]))
72
- elif (k == 'executable' and
73
- values[k] and
74
- not os.path.isfile(values[k])):
75
- raise FileNotFoundError('\nMatlab executable '
76
- 'was not updated:\n{} is '
77
- 'not existing!'.format(
78
- values[k]))
79
- else:
80
- setattr(conf, k, values[k])
89
+ # don't check invalid files: they may be valid on a remote
90
+ # server
91
+ #if (k == 'mcr_directory' and
92
+ #values[k] and
93
+ #not os.path.isdir(values[k])):
94
+ #raise NotADirectoryError('\nMatlab mcr_directory '
95
+ #'was not updated:\n{} is '
96
+ #'not existing!'.format(
97
+ #values[k]))
98
+ #elif (k == 'executable' and
99
+ #values[k] and
100
+ #not os.path.isfile(values[k])):
101
+ #raise FileNotFoundError('\nMatlab executable '
102
+ #'was not updated:\n{} is '
103
+ #'not existing!'.format(
104
+ #values[k]))
105
+ #else:
106
+ setattr(conf, k, values[k])
81
107
 
82
108
  controller = Controller()
83
109
  controller.add_trait('executable',
@@ -45,6 +45,22 @@ def activate_configurations():
45
45
  if py_path:
46
46
  sys.path = py_path + [p for p in sys.path if p not in py_path]
47
47
 
48
+ def check_notably_invalid_config(conf):
49
+ '''
50
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
51
+
52
+ Returns
53
+ -------
54
+ invalid: list
55
+ list of invalid config keys
56
+ '''
57
+ invalid = []
58
+ for k in ('executable', ):
59
+ if getattr(conf, k, None) is None:
60
+ invalid.append(k)
61
+ return invalid
62
+
63
+
48
64
  def edition_widget(engine, environment, config_id='python'):
49
65
  ''' Edition GUI for python config - see
50
66
  :class:`~capsul.qt_gui.widgets.settings_editor.SettingsEditor`
@@ -33,8 +33,7 @@ def init_settings(capsul_engine):
33
33
 
34
34
 
35
35
  def config_dependencies(config):
36
- if not config['standalone']:
37
- return {'matlab': 'any'}
36
+ return {'matlab': 'any'}
38
37
 
39
38
  #def set_environ(config, environ):
40
39
  #spm_config = config.get('spm', {})
@@ -160,6 +159,22 @@ def activate_configurations():
160
159
  del os.environ['SPM_STANDALONE']
161
160
 
162
161
 
162
+ def check_notably_invalid_config(conf):
163
+ '''
164
+ Checks if the given module config is obviously invalid, for instance if a mandatory path is not filled
165
+
166
+ Returns
167
+ -------
168
+ invalid: list
169
+ list of invalid config keys
170
+ '''
171
+ invalid = []
172
+ for k in ('directory', 'version'):
173
+ if getattr(conf, k, None) is None:
174
+ invalid.append(k)
175
+ return invalid
176
+
177
+
163
178
  def edition_widget(engine, environment, config_id='any'):
164
179
  ''' Edition GUI for SPM config - see
165
180
  :class:`~capsul.qt_gui.widgets.settings_editor.SettingsEditor`
@@ -98,7 +98,8 @@ class Settings:
98
98
  module_name = 'capsul.engine.module.' + module_name
99
99
  return module_name
100
100
 
101
- def select_configurations(self, environment, uses=None):
101
+ def select_configurations(self, environment, uses=None,
102
+ check_invalid_mods=False):
102
103
  '''
103
104
  Select a configuration for a given environment. A configuration is
104
105
  a dictionary whose keys are module names and values are
@@ -117,6 +118,9 @@ class Settings:
117
118
  environment and, if no result is found, the `'global'` environment
118
119
  (the value defined in `Settings.global_environment`) is used.
119
120
 
121
+ If `check_invalid_mods` is True, then each selected config module is
122
+ checked for missing values and discarded if there are.
123
+
120
124
  example
121
125
  -------
122
126
  To select a SPM version greater than 8 for an environment called
@@ -162,6 +166,19 @@ class Settings:
162
166
  full_query))
163
167
  else:
164
168
  docs = []
169
+
170
+ if check_invalid_mods:
171
+ # filter out invalid configs
172
+ doc_t = docs
173
+ docs = []
174
+ for doc in doc_t:
175
+ mod = sys.modules[module]
176
+ invalid = []
177
+ if hasattr(mod, 'check_notably_invalid_config'):
178
+ invalid = mod.check_notably_invalid_config(doc)
179
+ if len(invalid) == 0:
180
+ docs.append(doc)
181
+
165
182
  if len(docs) == 1:
166
183
  selected_config = docs[0]
167
184
  elif len(docs) > 1:
@@ -183,6 +200,19 @@ class Settings:
183
200
  full_query))
184
201
  else:
185
202
  docs = []
203
+
204
+ if check_invalid_mods:
205
+ # filter out invalid configs
206
+ doc_t = docs
207
+ docs = []
208
+ for doc in doc_t:
209
+ mod = sys.modules[module]
210
+ invalid = []
211
+ if hasattr(mod, 'check_notably_invalid_config'):
212
+ invalid = mod.check_notably_invalid_config(doc)
213
+ if len(invalid) == 0:
214
+ docs.append(doc)
215
+
186
216
  if len(docs) == 1:
187
217
  selected_config = docs[0]
188
218
  elif len(docs) > 1:
@@ -13,9 +13,8 @@ import json
13
13
  import glob
14
14
 
15
15
  from capsul.api import capsul_engine
16
- from capsul.api import Process, Pipeline
16
+ from capsul.api import Process
17
17
  from capsul.engine import activate_configuration
18
- from capsul import engine
19
18
  from soma_workflow import configuration as swconfig
20
19
  from traits.api import File
21
20
 
@@ -63,13 +62,14 @@ class MatlabProcess(Process):
63
62
  if not mconf:
64
63
  raise RuntimeError('Matlab config is not present')
65
64
 
65
+
66
66
  class PythonProcess(Process):
67
67
  output_config = File(output=True, desc='output file to write config',
68
68
  allowed_extensions=['.json'])
69
69
 
70
70
  # python requirements are handled automatically
71
- #def requirements(self):
72
- #return {'python': 'any'}
71
+ # def requirements(self):
72
+ # return {'python': 'any'}
73
73
 
74
74
  def _run_process(self):
75
75
  import capsul.engine
@@ -91,13 +91,15 @@ def tearDownModule():
91
91
  del os.environ['HOME']
92
92
  else:
93
93
  os.environ['HOME'] = old_home
94
- #print('temp_home_dir:', temp_home_dir)
94
+ # print('temp_home_dir:', temp_home_dir)
95
95
  shutil.rmtree(temp_home_dir)
96
96
 
97
97
 
98
98
  def check_nipype_spm():
99
99
  # look for hardcoded paths, I have no other way at hand...
100
100
  spm_standalone_paths = ['/usr/local/spm12-standalone',
101
+ '/volatile/local/spm12-standalone',
102
+ '/drf/local/spm12-standalone',
101
103
  '/i2bm/local/spm12-standalone']
102
104
  spm_standalone_path = [p for p in spm_standalone_paths if os.path.isdir(p)]
103
105
  if not spm_standalone_path:
@@ -115,6 +117,9 @@ def check_nipype_spm():
115
117
  mcr_path = l.split('=', 1)[1]
116
118
  if not mcr_path:
117
119
  mcr_paths = ['/usr/local/matlab/MATLAB_Runtime',
120
+ '/volatile/local/spm12-standalone/mcr',
121
+ '/volatile/local/MATLAB_Runtime',
122
+ '/drf/local/matlab/MATLAB_Runtime',
118
123
  '/i2bm/local/matlab/MATLAB_Runtime', ]
119
124
  for p in mcr_paths:
120
125
  mcr = glob.glob(osp.join(p, 'v*'))
@@ -136,7 +141,7 @@ class TestCapsulEngine(unittest.TestCase):
136
141
  def setUp(self):
137
142
  self.sqlite_file = str(tempfile.mktemp(suffix='.sqlite'))
138
143
  self.ce = capsul_engine(self.sqlite_file)
139
-
144
+
140
145
  def tearDown(self):
141
146
  self.ce = None
142
147
  # garbage collect to ensure the database is closed
@@ -146,29 +151,28 @@ class TestCapsulEngine(unittest.TestCase):
146
151
  if os.path.exists(self.sqlite_file):
147
152
  os.remove(self.sqlite_file)
148
153
 
149
-
150
154
  def test_engine_settings(self):
151
155
  # In the following, we use explicit values for config_id_field
152
156
  # (which is a single string value that must be unique for each
153
157
  # config). This is not mandatory but it avoids to have randomly
154
158
  # generated values making testing results more difficult to tackle.
155
159
  self.maxDiff = 2000
156
-
160
+
157
161
  cif = self.ce.settings.config_id_field
158
162
  with self.ce.settings as settings:
159
163
  # Create a new section object for 'fsl' in 'global' environment
160
164
  config = settings.config('fsl', 'global')
161
165
  if config:
162
166
  settings.remove_config('fsl', 'global',
163
- getattr(config, cif))
164
- fsl = settings.new_config('fsl', 'global', {cif:'5'})
167
+ getattr(config, cif))
168
+ fsl = settings.new_config('fsl', 'global', {cif: '5'})
165
169
  fsl.directory = '/there'
166
170
 
167
171
  # Create a global AFNI configuration
168
172
  config = settings.config('afni', 'global')
169
173
  if config:
170
174
  settings.remove_config('afni', 'global',
171
- getattr(config, cif))
175
+ getattr(config, cif))
172
176
  settings.new_config('afni', 'global', {'directory': '/there',
173
177
  cif: '22'})
174
178
 
@@ -183,15 +187,15 @@ class TestCapsulEngine(unittest.TestCase):
183
187
  # Create two global SPM configurations
184
188
  settings.new_config('spm', 'global', {'version': '8',
185
189
  'standalone': True,
186
- cif:'8'})
190
+ cif: '8'})
187
191
  settings.new_config('spm', 'global', {'version': '12',
188
192
  'standalone': False,
189
- cif:'12'})
193
+ cif: '12'})
190
194
  # Create one SPM configuration for 'my_machine'
191
195
  settings.new_config('spm', 'my_machine', {'version': '20',
192
196
  'standalone': True,
193
- cif:'20'})
194
-
197
+ cif: '20'})
198
+
195
199
  self.assertEqual(
196
200
  self.ce.settings.select_configurations('my_machine'),
197
201
  {'capsul_engine': {'uses': {'capsul.engine.module.fsl': 'ALL',
@@ -203,15 +207,15 @@ class TestCapsulEngine(unittest.TestCase):
203
207
  'directory': '/there',
204
208
  cif: '5'},
205
209
  'capsul.engine.module.afni': {
206
- 'config_environment': 'global','directory': '/there',
210
+ 'config_environment': 'global', 'directory': '/there',
207
211
  cif: '22'},
208
212
  'capsul.engine.module.ants': {
209
213
  'config_environment': 'global', 'directory': '/there',
210
214
  cif: '235'},
211
215
  'capsul.engine.module.spm': {'config_environment': 'my_machine',
212
- 'version': '20',
213
- 'standalone': True,
214
- cif: '20'}})
216
+ 'version': '20',
217
+ 'standalone': True,
218
+ cif: '20'}})
215
219
  self.assertRaises(EnvironmentError,
216
220
  lambda:
217
221
  self.ce.settings.select_configurations('global'))
@@ -220,7 +224,7 @@ class TestCapsulEngine(unittest.TestCase):
220
224
  uses={'fsl': 'any'}),
221
225
  {'capsul.engine.module.fsl':
222
226
  {'config_environment': 'global', 'directory': '/there',
223
- cif:'5'},
227
+ cif: '5'},
224
228
  'capsul_engine':
225
229
  {'uses': {'capsul.engine.module.fsl': 'any'}}})
226
230
 
@@ -228,8 +232,8 @@ class TestCapsulEngine(unittest.TestCase):
228
232
  self.ce.settings.select_configurations('global',
229
233
  uses={'afni': 'any'}),
230
234
  {'capsul.engine.module.afni':
231
- {'config_environment': 'global', 'directory': '/there',
232
- cif: '22'},
235
+ {'config_environment': 'global', 'directory': '/there',
236
+ cif: '22'},
233
237
  'capsul_engine':
234
238
  {'uses': {'capsul.engine.module.afni': 'any'}}})
235
239
 
@@ -237,8 +241,8 @@ class TestCapsulEngine(unittest.TestCase):
237
241
  self.ce.settings.select_configurations('global',
238
242
  uses={'ants': 'any'}),
239
243
  {'capsul.engine.module.ants':
240
- {'config_environment': 'global', 'directory': '/there',
241
- cif: '235'},
244
+ {'config_environment': 'global', 'directory': '/there',
245
+ cif: '235'},
242
246
  'capsul_engine':
243
247
  {'uses': {'capsul.engine.module.ants': 'any'}}})
244
248
 
@@ -251,7 +255,8 @@ class TestCapsulEngine(unittest.TestCase):
251
255
  'standalone': True,
252
256
  cif: '8'},
253
257
  'capsul_engine':
254
- {'uses': {'capsul.engine.module.spm': 'any'}}})
258
+ {'uses': {'capsul.engine.module.spm': 'any',
259
+ 'capsul.engine.module.matlab': 'any'}}})
255
260
  self.assertEqual(
256
261
  self.ce.settings.select_configurations(
257
262
  'global', uses={'spm': 'version=="12"'}),
@@ -292,7 +297,7 @@ print(sys.argv)
292
297
  if config:
293
298
  settings.remove_config('fsl', 'global',
294
299
  getattr(config, cif))
295
- fsl = settings.new_config('fsl', 'global', {cif:'5'})
300
+ fsl = settings.new_config('fsl', 'global', {cif: '5'})
296
301
  fsl.directory = tdir
297
302
  fsl.prefix = 'fsl5.0-'
298
303
 
@@ -328,9 +333,7 @@ print(sys.argv)
328
333
  def test_nipype_spm_config(self):
329
334
  tdir = tempfile.mkdtemp(prefix='capsul_spm')
330
335
  try:
331
- cif = self.ce.settings.config_id_field
332
336
  spm_path, mcr_path = check_nipype_spm()
333
- # FIXME: do something with mcr_path
334
337
  t1_src = osp.join(spm_path,
335
338
  'spm12_mcr/spm12/toolbox/OldNorm/T1.nii')
336
339
  if not osp.exists(t1_src):
@@ -347,10 +350,13 @@ print(sys.argv)
347
350
  {'directory': spm_path, 'standalone': True,
348
351
  'version': '12'})
349
352
  session.new_config('nipype', 'global', {})
353
+ if mcr_path:
354
+ session.new_config('matlab', 'global',
355
+ {'mcr_directory': mcr_path})
350
356
 
351
357
  self.ce.study_config.use_soma_workflow = True
352
358
  self.ce.study_config.somaworkflow_keep_failed_workflows = True
353
- #self.ce.study_config.somaworkflow_keep_succeeded_workflows = True
359
+ # self.ce.study_config.somaworkflow_keep_succeeded_workflows = True
354
360
 
355
361
  conf = self.ce.settings.select_configurations(
356
362
  'global', uses={'nipype': 'any', 'spm': 'any'})
@@ -364,7 +370,7 @@ print(sys.argv)
364
370
  self.assertTrue(osp.exists(osp.join(tdir, 'sT1.nii')))
365
371
 
366
372
  finally:
367
- #print('tdir:', tdir)
373
+ # print('tdir:', tdir)
368
374
  shutil.rmtree(tdir)
369
375
 
370
376
  @unittest.skipIf(sys.platform.startswith('win'),
@@ -401,7 +407,7 @@ print(sys.argv)
401
407
  {'config_id': 'matlab', 'executable': matlab_exe,
402
408
  'config_environment': 'global'})
403
409
  finally:
404
- #print('tdir:', tdir)
410
+ # print('tdir:', tdir)
405
411
  shutil.rmtree(tdir)
406
412
 
407
413
  @unittest.skipIf(sys.platform.startswith('win'),
@@ -446,7 +452,7 @@ print(sys.argv)
446
452
  for path in py_path:
447
453
  self.assertTrue(path in paths)
448
454
  finally:
449
- #print('tdir:', tdir)
455
+ # print('tdir:', tdir)
450
456
  shutil.rmtree(tdir)
451
457
 
452
458