Dans l'un de mes articles, j'énumère des résultats numériques en plus de certains chiffres. Ce que j'aimerais faire, c'est m'assurer que les résultats numériques dans mon papier sont toujours en accord avec le code. À l’heure actuelle, je copie directement les résultats numériques de la sortie de ma simulation dans le document, ce qui est extrêmement simple et peu technique, mais source d’erreurs, car je pourrais mal copier les résultats ou oublier de synchroniser les résultats sur papier. sortie de code.
Existe-t-il un moyen efficace de synchroniser les résultats numériques cités dans mes documents avec les résultats générés par mon code? (Ici, je suppose que l’exécution du code est facile et pratique à faire chaque fois que je souhaite mettre à jour mon document.) Ces résultats numériques ne se prêtent pas nécessairement à la forme tabulaire. Parfois, j'ai des tableaux dans les manuscrits, mais plus généralement, j'ai des paramètres de simulation listés sous forme de nombres dans les équations . Un exemple serait quelque chose comme:
où je voudrais remplacer les éléments de la condition initiale par les paramètres que j’utilise dans une simulation qui intègre numériquement un système d’équations différentielles ordinaires. L'utilisation d'une table pour des données uniques, comme dans cet exemple, semble excessive et demande plus d'encre que nécessaire.
Je suppose que les figures sont un cas plus simple: chaque fois que le document est "construit" (à partir du source LaTeX, Markdown, RST, etc.), démarrez le processus de construction en exécutant le code. Toutefois, si les gens avaient de meilleures suggestions pour que les chiffres générés par mes simulations soient synchronisés avec mon document, j'aimerais les entendre.
la source
spin()
fonction. Personnellement, je pense que les plaintes de Greg Wilson concernant la programmation alphabète sont assez datées. J'ai eu la même expérience terrible qu'il décrit avec noweb, mais ce débogage compliqué n'existe tout simplement pas dans les outils modernes. Pour l'IA alphabète, utilisez doxygen. Knitr est plus facile à déboguer que R grâce à la mise en cache et à la gestion de l’environnement.Ce que vous demandez, c'est le grand défi Elsivier du "papier exécutable" . Bien que de nombreuses approches aient été essayées, aucune n’est aussi convaincante que les auteurs pourraient le suggérer. Voici quelques exemples de techniques utilisées.
Madagascar Project adopte votre approche, dans le script de création, exécutez les simulations qui produisent les figures et le papier simultanément.
IPython Notebook fournit un document que vous pouvez exécuter lorsque vous lisez et produisez des illustrations au contenu qui vous tient à cœur. (J'ai vu des plugins de mots, Mathematica et de nombreuses autres solutions utilisées de la même manière)
VisTrails utilise une approche d’architecture orientée service et fournit un gestionnaire de «prévoyance» ou de «flux de travail». En gros, vous enregistrez les points d'ancrage dans le code, puis vous concevez un flux de travail ou un test reproduisant votre travail. Il a été utilisé sur de nombreux types de codes, même les clusters HPC. Avec cette approche, vous aurez un moyen de rejouer les expériences.
Il existe de nombreuses solutions de ce type, mais ce sont trois solutions qui m'ont impressionné. C'est un problème difficile et je crois que nous ne sommes même pas près de nous attaquer. Nous ne pouvons même pas amener les gens à publier leur code avec leurs papiers, comment pouvons-nous nous attendre à ce qu'ils reproduisent les résultats = P
la source
Je n'ai pas eu beaucoup de succès en utilisant les solutions des autres à ce problème. D'habitude, je veux juste quelque chose de simple qui fonctionne pour moi et qui fait le travail. À cette fin, j'essaie généralement d'écrire un script python chargé d'exécuter tous les résultats, d'analyser la sortie, ainsi que de construire les figures / tables.
J'écris mes codes pour générer des fichiers de données contenant les résultats dans un format texte. Vous pouvez éviter de réexécuter ces résultats dans votre script en vérifiant d’abord l’existence du fichier de sortie (en python avec os.path.isfile () par exemple). Si vous souhaitez réexécuter vos résultats, supprimez simplement les fichiers de données. Si les fichiers de données existent, je lance un analyseur syntaxique de ces fichiers. Pour cela, le module python pour les expressions régulières est très utile (re).
Ensuite, à partir de la sortie analysée, je crée les figures ou les tableaux. Pour les tables en latex, vous pouvez écrire le code pour générer la table dans un fichier séparé (j'utilise une extension .tbl), puis l'inclure dans votre fichier latex. La clé pour moi est d'utiliser 1 script python. Si j'en ai plusieurs, je me demande plus tard lequel est ce et ce qu'ils font. Si cette description est trop vague, je peux vous envoyer quelques exemples.
la source
\input{|"path-to-script.py"}
. Je pense que vous feriez mieux de mettre tous les paramètres dans un seul fichier Python (ou quelle que soit la langue choisie) et d’utiliser un paramètre de ligne de commande pour y accéder, de la même manière\input{|"path-to-script.py param-name"}
. Dans ce cas, vous pouvez inclure le fichier param dans d'autres scripts pour exécuter les simulations. Cependant, cela rend la compilation plus lente et a quelques autres points négatifs.Le plus important, à mon avis, est de vous assurer que vous pouvez trouver un moyen de générer à nouveau tous vos résultats en un mois ou une année (par exemple, lorsque les arbitres vous demandent d’ajouter ou de modifier quelque chose). Pour cela, je propose un fichier texte contenant des instructions très détaillées sur la manière de reproduire tous les résultats. Il est préférable de les tester en les faisant essayer à quelqu'un d'autre (comme un co-auteur). Je vous recommande de fournir également ces instructions (et tout votre code) aux arbitres et aux lecteurs.
Voici un exemple (préparé par mon co-auteur, Aron Ahmadia).
la source
L' orgmode d'Emacs associé à Babel y parvient. Babel peut exécuter des fragments de code à partir de divers langages de programmation et de script. Il peut par exemple ouvrir le fichier contenant les données de simulation et le placer dans une table en orgmode, qui peut être exportée vers LaTeX (et de nombreux autres formats). Il faut un certain temps pour s'habituer à toutes les combinaisons de touches dans orgmode, mais une fois que tout est en cours d'exécution, tout est automatique.
la source
Si exécuter tout votre code est bon marché, vous pouvez faire quelque chose de low-tech tel que:
Vous pouvez créer un modèle pour vos documents avec des chaînes formatées afin qu'elles ressemblent à ceci
Avoir des scripts python qui ressemblent à ceci
Et puis faire quelque chose comme ça
Vous pouvez ensuite envelopper cela dans un Makefile.
la source
Si vous utilisez LaTeX, une solution relativement peu technologique consiste à faire cracher votre fichier par un code (ou à utiliser un script pour filtrer la sortie de votre code) contenant tout un tas de lignes comme celle-ci:
\newcommand{\myresults1}{<value>}
Vous pouvez ensuite utiliser la
\input
commande pour ajouter ce fichier dans votre document et utiliser les commandes définies pour placer les valeurs.la source
Je travaille pour Elsevier. Mon entreprise a commencé à utiliser le framework Collage (développé en réponse au défi Executable Paper Grand Challenge) dans les revues afin de permettre aux auteurs de publier des morceaux de code exécutable avec leur article. Cette fonctionnalité permet aux lecteurs de reproduire plus facilement les résultats rapportés dans l'article et de réutiliser le matériel publié pour leurs propres recherches. Collage prend en charge une grande variété de logiciels propriétaires et à code source ouvert; Vous trouverez plus d'informations dans la vidéo d'information ici et sur le site Web Collage Authoring Environment .
la source