Skip to content

Commit

Permalink
Backport fixes for ivadomed and submodule access
Browse files Browse the repository at this point in the history
Fixes #4163.
  • Loading branch information
mguaypaq committed Nov 30, 2022
1 parent 24f602b commit b8be5c4
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 34 deletions.
2 changes: 1 addition & 1 deletion requirements-freeze.txt
Expand Up @@ -37,7 +37,7 @@ imageio==2.22.4
importlib-metadata==5.1.0
iniconfig==1.1.1
interface-meta==1.3.0
ivadomed==2.9.7
ivadomed==2.9.8
joblib==1.2.0
kiwisolver==1.4.4
loguru==0.6.0
Expand Down
4 changes: 2 additions & 2 deletions spinalcordtoolbox/compat/launcher.py
Expand Up @@ -5,7 +5,7 @@
import subprocess
import multiprocessing

import spinalcordtoolbox as sct
from spinalcordtoolbox import __file__ as package_init_file


def main():
Expand All @@ -26,7 +26,7 @@ def main():
env['NEURITE_BACKEND'] = 'pytorch'

command = os.path.basename(sys.argv[0])
pkg_dir = os.path.dirname(sct.__file__)
pkg_dir = os.path.dirname(package_init_file)

script = os.path.join(pkg_dir, "scripts", "{}.py".format(command))
assert os.path.exists(script)
Expand Down
20 changes: 10 additions & 10 deletions spinalcordtoolbox/deepseg/models.py
Expand Up @@ -11,7 +11,7 @@
import shutil

import spinalcordtoolbox as sct
import spinalcordtoolbox.download
from spinalcordtoolbox import download
from spinalcordtoolbox.utils import stylize


Expand Down Expand Up @@ -256,7 +256,7 @@ def install_model(name_model):
:return: None
"""
logger.info("\nINSTALLING MODEL: {}".format(name_model))
sct.download.install_data(MODELS[name_model]['url'], folder(name_model))
download.install_data(MODELS[name_model]['url'], folder(name_model))


def install_default_models():
Expand Down Expand Up @@ -292,21 +292,21 @@ def list_tasks():


def display_list_tasks():
tasks = sct.deepseg.models.list_tasks()
tasks = list_tasks()
# Display beautiful output
color = {True: 'LightGreen', False: 'LightRed'}
print("{:<30s}{:<50s}{:<15s}MODELS".format("TASK", "DESCRIPTION", "CONTRAST"))
print("-" * 120)
for name_task, value in tasks.items():
path_models = [sct.deepseg.models.folder(name_model) for name_model in value['models']]
are_models_valid = [sct.deepseg.models.is_valid(path_model) for path_model in path_models]
path_models = [folder(name_model) for name_model in value['models']]
are_models_valid = [is_valid(path_model) for path_model in path_models]
task_status = stylize(name_task.ljust(30),
color[all(are_models_valid)])
description_status = stylize(value['description'].ljust(50),
color[all(are_models_valid)])
models_status = ', '.join([stylize(model_name,
color[is_valid])
for model_name, is_valid in zip(value['models'], are_models_valid)])
color[validity])
for model_name, validity in zip(value['models'], are_models_valid)])
input_contrasts = stylize(str(', '.join(model_name for model_name in
get_required_contrasts(name_task))).ljust(15),
color[all(are_models_valid)])
Expand All @@ -326,7 +326,7 @@ def display_list_tasks():


def display_list_tasks_long():
for name_task, value in sct.deepseg.models.list_tasks().items():
for name_task, value in list_tasks().items():
indent_len = len("LONG_DESCRIPTION: ")
print("{}{}".format("TASK:".ljust(indent_len), stylize(name_task, 'Bold')))
print('\n'.join(textwrap.wrap(value['long_description'],
Expand All @@ -335,9 +335,9 @@ def display_list_tasks_long():
subsequent_indent=' '*indent_len)))
print("{}{}".format("URL:".ljust(indent_len), stylize(value['url'], 'Cyan')))

path_models = [sct.deepseg.models.folder(name_model)
path_models = [folder(name_model)
for name_model in value['models']]
if all([sct.deepseg.models.is_valid(path_model) for path_model in path_models]):
if all([is_valid(path_model) for path_model in path_models]):
installed = stylize("Yes", 'LightGreen')
else:
installed = stylize("No", 'LightRed')
Expand Down
36 changes: 17 additions & 19 deletions spinalcordtoolbox/scripts/sct_deepseg.py
Expand Up @@ -18,10 +18,8 @@
from ivadomed import inference as imed_inference
import nibabel as nib

import spinalcordtoolbox as sct
import spinalcordtoolbox.deepseg as deepseg
import spinalcordtoolbox.deepseg.models

from spinalcordtoolbox.deepseg import models
from spinalcordtoolbox.image import splitext
from spinalcordtoolbox.utils.shell import SCTArgumentParser, Metavar, display_viewer_syntax
from spinalcordtoolbox.utils.sys import init_sct, printv, set_loglevel

Expand Down Expand Up @@ -74,7 +72,7 @@ def get_parser():
seg.add_argument(
"-install-task",
help="Install models that are required for specified task.",
choices=list(deepseg.models.TASKS.keys()))
choices=list(models.TASKS.keys()))

misc = parser.add_argument_group('\nPARAMETERS')
misc.add_argument(
Expand Down Expand Up @@ -146,14 +144,14 @@ def main(argv: Sequence[str]):

# Deal with task
if arguments.list_tasks:
deepseg.models.display_list_tasks()
models.display_list_tasks()
# Deal with task long description
if arguments.list_tasks_long:
deepseg.models.display_list_tasks_long()
models.display_list_tasks_long()

if arguments.install_task is not None:
for name_model in deepseg.models.TASKS[arguments.install_task]['models']:
deepseg.models.install_model(name_model)
for name_model in models.TASKS[arguments.install_task]['models']:
models.install_model(name_model)
exit(0)

# Deal with input/output
Expand All @@ -162,12 +160,12 @@ def main(argv: Sequence[str]):
parser.error("This file does not exist: {}".format(file))

# Verify if the task is part of the "official" tasks, or if it is pointing to paths containing custom models
if len(arguments.task) == 1 and arguments.task[0] in deepseg.models.TASKS:
if len(arguments.task) == 1 and arguments.task[0] in models.TASKS:
# Check if all input images are provided
required_contrasts = deepseg.models.get_required_contrasts(arguments.task[0])
required_contrasts = models.get_required_contrasts(arguments.task[0])
n_contrasts = len(required_contrasts)
# Get pipeline model names
name_models = deepseg.models.TASKS[arguments.task[0]]['models']
name_models = models.TASKS[arguments.task[0]]['models']
else:
n_contrasts = len(arguments.i)
name_models = arguments.task
Expand All @@ -188,22 +186,22 @@ def main(argv: Sequence[str]):
output_filenames = None
for name_model in name_models:
# Check if this is an official model
if name_model in list(deepseg.models.MODELS.keys()):
if name_model in list(models.MODELS.keys()):
# If it is, check if it is installed
path_model = deepseg.models.folder(name_model)
if not deepseg.models.is_valid(path_model):
path_model = models.folder(name_model)
if not models.is_valid(path_model):
printv("Model {} is not installed. Installing it now...".format(name_model))
deepseg.models.install_model(name_model)
models.install_model(name_model)
# If it is not, check if this is a path to a valid model
else:
path_model = os.path.abspath(name_model)
if not deepseg.models.is_valid(path_model):
if not models.is_valid(path_model):
parser.error("The input model is invalid: {}".format(path_model))

# Order input images
if arguments.c is not None:
input_filenames = []
for required_contrast in deepseg.models.MODELS[name_model]['contrasts']:
for required_contrast in models.MODELS[name_model]['contrasts']:
for provided_contrast, input_filename in zip(arguments.c, arguments.i):
if required_contrast == provided_contrast:
input_filenames.append(input_filename)
Expand Down Expand Up @@ -231,7 +229,7 @@ def main(argv: Sequence[str]):
fname_seg = options['o'].replace(extension, target + extension) if len(target_lst) > 1 \
else options['o']
else:
fname_seg = ''.join([sct.image.splitext(input_filenames[0])[0], target + '.nii.gz'])
fname_seg = ''.join([splitext(input_filenames[0])[0], target + '.nii.gz'])

# If output folder does not exist, create it
path_out = os.path.dirname(fname_seg)
Expand Down
4 changes: 2 additions & 2 deletions spinalcordtoolbox/scripts/sct_version.py
@@ -1,10 +1,10 @@
#!/usr/bin/env python

import spinalcordtoolbox as sct
from spinalcordtoolbox import __version__


def main():
print(sct.__version__)
print(__version__)


if __name__ == "__main__":
Expand Down

0 comments on commit b8be5c4

Please sign in to comment.