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.
- {capsul-2.3.1/capsul.egg-info → capsul-2.3.2}/PKG-INFO +16 -2
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/completion_engine_iteration.py +8 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/database_populse.py +1 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/afni.py +16 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/ants.py +16 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/axon.py +17 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/fom.py +3 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/freesurfer.py +16 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/fsl.py +17 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/matlab.py +45 -19
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/python.py +16 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/spm.py +17 -2
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/settings.py +31 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/test/test_capsul_engine.py +38 -32
- capsul-2.3.2/capsul/engine/write_engine_config.py +50 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/nipype.py +16 -18
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/spm.py +22 -14
- {capsul-2.3.1 → capsul-2.3.2}/capsul/info.py +3 -3
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_workflow.py +3 -2
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline_workflow.py +38 -5
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/process.py +9 -5
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/runprocess.py +28 -14
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/activation_inspector.py +1 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/matlab_config.py +1 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/spm_config.py +60 -16
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/study_config.py +6 -6
- {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/fsl.py +1 -1
- {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/spm.py +34 -29
- {capsul-2.3.1 → capsul-2.3.2/capsul.egg-info}/PKG-INFO +16 -2
- {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/SOURCES.txt +1 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/conf.py +5 -5
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/index.rst +4 -4
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/user_guide_tree/index.rst +13 -0
- {capsul-2.3.1 → capsul-2.3.2}/AUTHOR +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/LICENSE +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/MANIFEST.in +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/README.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/__main__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/api.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/attributes_factory.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/attributes_schema.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/completion_engine.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/completion_engine_factory.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/fom_completion_engine.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/test/test_attributed_process.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/attributes/test/test_fom_process.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/database.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/database_json.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/attributes.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/nipype.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/module/somaworkflow.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/run.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/engine/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/afni.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/ants.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/freesurfer.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/in_context/fsl.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/cv_node.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/loo_node.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/map_node.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/reduce_node.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/strcat_node.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/custom_nodes/strconv.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/json_io.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_construction.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_nodes.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/pipeline_tools.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/process_iteration.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/python_export.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/acpcorientation.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/aimsconverter.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/baladinnormalizationpipeline.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/baladinnormalizationtoaims.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/brainorientation.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/brainsegmentation.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/fslnormalization.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/fslnormalizationtoaims.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/greywhiteclassificationhemi.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/greywhitemesh.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/greywhitetopology.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/histoanalysis.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/importt1mri.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/morphologist.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_aimsmiregister.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_baladin.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_fsl_reinit.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_t1_spm12_reinit.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalization_t1_spm8_reinit.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/normalizationskullstripped.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/pialmesh.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/reorientanatomy.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/scalpmesh.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/skullstripping.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/splitbrain.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/spmnormalization.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/spmsn3dtoaims.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcideeplabeling.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcigraph.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcigraphmorphometrybysubject.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabelling.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingann.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspam.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspamglobal.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspamlocal.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulcilabellingspammarkov.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/sulciskeleton.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/t1biascorrection.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/talairachtransformation.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/fake_morphologist/talairachtransformationfromnormalization.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_activation.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_complex_pipeline_activations.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_custom_nodes.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_double_switch.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_iterative_process.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_optional_output_switch.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline_parameters.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_pipeline_with_temp.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_proc_with_outputs.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_process_iteration.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_qc_nodes.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_optional_output.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_pipeline.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_subpipeline.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_subpipeline_one.json +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_switch_subpipeline_two.json +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/test/test_temporary.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/topological_sort.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/pipeline/xml.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/plugins/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/nipype_process.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_load_from_description.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_nipype_wrap.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_pipeline.xml +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_runprocess.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/test_traits.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/test/xml_pipeline.xml +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/process/xml.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/capsulview +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/main_window.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/pipeline_viewer_app.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/capsul.ui +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/change_view.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/config.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/controller.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/exit.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/help.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/icones.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/icones.qrc +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/inspect.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/logo.gif +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/logo.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/open.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/play.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/readme.txt +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/search.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/transfer.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/resources/view_result.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/application.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/fill_treectrl.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/find_pipelines.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_apps/utils/window.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/board_widget.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/test/test_board_widget.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/attributed_process_widget.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/links_debugger.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_developer_view.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_developper_view.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_file_warning_widget.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/pipeline_user_view.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/settings_editor.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/qt_gui/widgets/viewer_widget.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/run.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_pipeline_rst.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_pipeline_view.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_sphinx_layout.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/capsul_usecases_rst.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/layoutdocgen.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/load_pilots.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/pipelinedocgen.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/test/test_process_pipeline_doc.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/test/test_usercases_doc.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/sphinxext/usecasesdocgen.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/afni_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/ants_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/attributes_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/brainvisa_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/fom_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/freesurfer_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/fsl_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/nipype_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/smartcaching_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_modules/somaworkflow_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/config_utils.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/memory.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/process_instance.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/run.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_fsl_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_memory.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_run_in_study_config.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_run_process.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_soma_workflow.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_soma_workflow_with_kw.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_study_config_configuration.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/study_config/test/test_study_config_fom.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/afni.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/subprocess/ants.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/test/__main__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/test/coverage.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/test/test_capsul_modules_import.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/test/test_capsul_notebooks.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/finder.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/test/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/test/test_utils.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul/utils/version_utils.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/dependency_links.txt +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/requires.txt +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/capsul.egg-info/top_level.txt +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/Makefile +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/capsul_logo.svg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap-responsive.css +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap-responsive.min.css +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap.css +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/css/bootstrap.min.css +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/custom.css +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/find_read.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/js/bootstrap.js +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/js/bootstrap.min.js +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/pipeline_switch.png +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_static/workflow_switch.svg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/_templates/layout.html +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/api.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/attributes.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/engine.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/in_context.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/index.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/info.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/pipeline.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/plugins.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/process.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/qt_apps.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/qt_gui.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/sphinxext.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/study_config.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/subprocess.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/api/utils.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/documentation.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/installation.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/LICENSE.txt +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/MANIFEST.in +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/README.txt +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/__init__.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/docscrape.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/docscrape_sphinx.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/sphinxext/numpy_ext/numpydoc.py +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/status.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/capsul_tutorial.ipynb +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/capsul_tutorial.ipynb.in +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_controller1.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom1.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom1_compl.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom1_controller.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom2.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_fom2_compl.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_iter1.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline1.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline2.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline3.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline5.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline6.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline6b.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline7.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml1.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml1_controller.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml2.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/tutorial/images/capsul_pipeline_xml2_controller.jpg +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/user_guide_tree/advanced_usage.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/doc/source/user_guide_tree/xml_spec.rst +0 -0
- {capsul-2.3.1 → capsul-2.3.2}/setup.cfg +0 -0
- {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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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',
|
|
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
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
if not
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
232
|
-
|
|
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
|
-
|
|
241
|
-
|
|
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
|
|