Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

return runtime

0 votes

je suis tombé sur ça dans une doc et je me demande ce qu'est runtime, à quoi il sert et à quoi sert de le renvoyer en fin de fonction.

    def _run_interface(self, runtime):
        # plein de code cool ici, mais aucune utilite a runtime
        return runtime
demandé 4-Fev-2015 par furankun (1,434 points)

2 Réponses

+1 vote
 
Meilleure réponse

J'ai été voir le projet en question, c'est juste que t'es tombé sur une convention d'architecture dans le cas présent.

En fait dans le projet il y a plusieurs classes qui héritent de Interface et qui possèdent tous cette fameuse méthode privée _run_interface. Dans la plupart des cas, cette méthode effectue un traitement sur le runtime passé en paramètre avant de le retransmettre, tu es juste tombé sur le cas particulier où ce paramètre est intouché mais il est nécessaire par respect de l'architecture de le renvoyer tel quel. :)

répondu 5-Fev-2015 par debnet (1,024 points)
sélectionné 5-Fev-2015 par furankun

Quelques précisions. En fouillant dans la doc du projet je suis tombé là-dessus

nipype.interfaces.base.run_command(runtime, output=None, timeout=0.01)

Run a command, read stdout and stderr, prefix with timestamp.

The returned runtime contains a merged stdout+stderr log with timestamps

En fouillant le code on peut trouver des endroits où runtime est parsé pour vérifier que tout s'est bien passé en testant stdout et/ou stderr.
Je comprends le principe, même si je trouve un peu con d'avoir utilisé un nom de variable déjà connoté.

0 votes

runtime est certainement un objet qui est modifié par la méthode et qui est renvoyé après transformation.

Si tu avais laissé le code cool, on aurait pu t'expliquer exactement pourquoi c'est renvoyé tel quel.

répondu 4-Fev-2015 par debnet (1,024 points)

Ok, je recopie tout le code donc, mais comme indiqué ça n'apporte rien à la question. Il s'agit de l'exemple de wrapper nipype pour un script python 1:

from nipype.interfaces.base import BaseInterface, BaseInterfaceInputSpec, traits, File, TraitedSpec
from nipype.utils.filemanip import split_filename

import nibabel as nb
import numpy as np
import os

class SimpleThresholdInputSpec(BaseInterfaceInputSpec):
    volume = File(exists=True, desc='volume to be thresholded', mandatory=True)
    threshold = traits.Float(desc='everything below this value will be set to zero', mandatory=True)

class SimpleThresholdOutputSpec(TraitedSpec):
    thresholded_volume = File(exists=True, desc="thresholded volume")

class SimpleThreshold(BaseInterface):
    input_spec = SimpleThresholdInputSpec
    output_spec = SimpleThresholdOutputSpec

    def _run_interface(self, runtime):
        fname = self.inputs.volume
        img = nb.load(fname)
        data = np.array(img.get_data())

        active_map = data > self.inputs.threshold

        thresholded_map = np.zeros(data.shape)
        thresholded_map[active_map] = data[active_map]

        new_img = nb.Nifti1Image(thresholded_map, img.get_affine(), img.get_header())
        _, base, _ = split_filename(fname)
        nb.save(new_img, base + '_thresholded.nii')

        return runtime

    def _list_outputs(self):
        outputs = self._outputs().get()
        fname = self.inputs.volume
        _, base, _ = split_filename(fname)
        outputs["thresholded_volume"] = os.path.abspath(base + '_thresholded.nii')
        return outputs

J'ai été voir le projet en question, c'est juste que t'es tombé sur une convention d'architecture dans le cas présent.

En fait dans le projet il y a plusieurs classes qui héritent de Interface et qui possèdent tous cette fameuse méthode privée _run_interface. Dans la plupart des cas, cette méthode effectue un traitement sur le runtime passé en paramètre avant de le retransmettre, tu es juste tombé sur le cas particulier où ce paramètre est intouché mais il est nécessaire par respect de l'architecture de le renvoyer tel quel. :)

debnet : met ça en réponse qu'on puisse upvoter et valider.

...