methnum


Namemethnum JSON
Version 3.0.dev1 PyPI version JSON
download
home_pageNone
SummarySoftware to use MethNum course material, based on travo.
upload_time2024-10-20 18:49:05
maintainerNone
docs_urlNone
authorJérémy Neveu, Nicolas M. Thiéry
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Environnement MethNum

## Présentation

L'environnement `methnum` est une adaptation de la librairie générique [`travo`](https://gitlab.com/travo-cr/travo/) au cours de Méthodes Numériques de l'Université Paris-Saclay.
Cette suite de scripts est installée pour tous sur le [JupyterHub](https://jupyterhub.ijclab.in2p3.fr/) de l'Université Paris-Saclay, et permet aux étudiants de télécharger et de soumettre leurs travaux numériques, et aux enseignants de collecter les copies, les corriger, les annoter et les retourner aux étudiants. 
Les technologies au cœur de cette architecture sont [`gitlab`](https://gitlab.dsi.universite-paris-saclay.fr/MethNum) et [`nbgrader`](https://nbgrader.readthedocs.io/en/stable/).



## <a name="install"></a> Installation de l'environnement methnum

L'environnement `methnum` est nativement installé sur le [JupyterHub](https://jupyterhub.ijclab.in2p3.fr/) de l'Université Paris-Saclay.
Il est conseillé d'utiliser cette plateforme pour avoir un environnement maîtrisé et commmun à toute l'équipe pédagogique. 
A des fins de développement ou de gestion fine des enseignements, il peut toutefois être installé simplement sur des ordinateurs individuels via une installation de [`miniconda`](https://docs.conda.io/en/latest/miniconda.html).

### Installation de miniconda

Télécharger l'installeur Miniconda depuis ce site : 
https://conda.io/docs/user-guide/install/index.html
et suivre l'installation.

### Installation des scripts methnum

Il est conseillé de développer le cours dans le même environnement python que celui fournit aux étudiants. Pour cela il faut installer python via *Anaconda* (https://www.anaconda.com/download/). Si l'installation de python a été réalisée via Anaconda, téléchargez le répertoire qui contient les scripts du cours :
```
git clone https://gitlab.dsi.universite-paris-saclay.fr/MethNum/ComputerLab ComputerLab
cd ComputerLab
```
puis tapez :
```
conda env create -f .scripts/environment.yml
jupyter nbextension install --sys-prefix --py nbgrader --overwrite
jupyter nbextension enable --sys-prefix --py nbgrader
jupyter serverextension enable --sys-prefix --py nbgrader
```
Puis, il faut activer l'environnement `methnum` par :
```
conda activate methnum
```
Dans l'éventualité où une nouvelle version des scripts ou de l'environnement est disponible, mettez à jour votre copie de `ComputerLab`:
```
cd ComputerLab
git pull
```
puis tapez :
```
conda env update -n methnum -f .scripts/environment.yml --prune # installation du nouvel environnement
```
:::{tip}
# Mamba
Au lieu de Miniconda, vous pouvez installer [Minimamba](https://mamba.readthedocs.io/en/latest/micromamba-installation.html#umamba-install). Remplacez toutes les
commandes ci-dessus `conda` par `mamba` et vous verrez que l'environnement `methnum` s'installe bien plus rapidement !
:::


:::{note}
:class: dropdown
# Installation en salle de TP

Ces commandes peuvent être nécessaires au SIF pour mettre à jour l'environnement utilisé par les étudiants ***dans toutes les salles de TP de l'université***.
```
ssh -Y prenom.nom@ssh2.pgip.universite-paris-saclay.fr
cd MethNum/ComputerLab  # a cloner si absent
/public/methnum/miniconda3/bin/mamba env update -f .scripts/environment.yml --prune
```
:::

:::{note} 
:class: dropdown
# Survivre sans `conda`

Il est possible de participer au cours sans une installation de miniconda, en créant un environnement virtuel ou non. Une différence majeure sera que les scripts liés à methnum ne seront pas dans le PYTHONPATH, donc pour la plupart des commandes ci-dessous il faudra rajouter le chemin complet des scripts `.scripts/bin/monscript`. Les librairies du cours sont installables avec la commande `pip install -r .scripts/environement.yml`.
:::

## Description des scripts principaux fournis avec methnum

### Téléchargement d'une séance : fetch

Etudiants et enseignants peuvent télécharger un sujet sans réponse en tapant une première fois :
```
methnum fetch L1/Seance1 GROUPE
```
La séance est automatiquement placée dans un dossier `MethNum` placé dans le `$HOME`. **Ce dossier ne doit pas être déplacé ni renommé.** Techniquement, la personne qui exécute cette commande réalise un *fork* du dépôt gitlab public.

Sur les ordinateurs de l'université, il faut ensuite lancer un serveur jupyter avec :
```
methnum jupyter notebook
```
Cette commande n'est pas nécessaire sur le jupyterhub.

### Poster ses réponses : submit

Une séance dont les réponses ont été partiellement ou totalement rentrées peut être postée 
sur un [dépôt gitlab personnel privé](https://gitlab.dsi.universite-paris-saclay.fr/) autant de fois 
que nécessaire par la commande :
```
methnum submit L1/Seance1 GROUPE
```
Si le dépôt n'existe pas au premier `submit`, il est créé, et les droits de lecture et écriture sont donnés aux enseignants, mais pas aux autres étudiants.
La notion de groupe ici est très importante, car elle permet à l'enseignant référent du groupe de ne récupérer que ses copies : le dépôt personnel de l'étudiant est créé avec un lien de *fork* avec le dépôt commun à son groupe contenant les sujets.

À partir du premier `submit`, toute future commande `fetch` va télécharger la séance depuis le gitlab personnel et non depuis le dépôt public qui contient les sujets vierges. Cela permet de se servir de son dépôt gitlab comme d'un dépôt de sauvegarde en ligne pour transférer son travail d'une plateforme à une autre (voir schéma ci-dessous).

<img src="figures/methnum_structure.png" alt="Markdown Monster icon" style="float: left; margin-right: 10px;" />

### Lancer la correction automatique : student_autograde et force_autograde

Lors d'un `submit`, une nouvelle version de la copie de l'étudiant est postée sur son dépôt personnel. Si un fichier `.gitlab-ci.yaml` est présent, le serveur lance un 
processus d'intégration continue, qui fait appel à la fonction `student_autograde` : celle-ci lance la procédure de correction automatique et génère des *artefacts*. Ces derniers sont les
fichiers de sortie générés pas la notation automatique, à savoir essentiellement le fichier contenant l'exécution du notebook (`TD1.ipynb` par exemple) et le base de données contenant les notes (`.gradebook.db`).
Ces artefacts sont exposés sur le web dans la rubrique "CI/CD" du dépôt gitlab de l'étudiant, en cliquant sur le dernier job lancé puis *Browse* à droite.

En cas de nécessité, il est possible de forcer le lancement de la correction automatique par l'enseignant via la commande :
```
methnum force_autograde L1/Seance1 GROUPE
```
*NB : l'intégration continue a un temps maximal d'exécution de 10 minutes, 
il faut donc veiller à proposer des devoirs dont l'exécution est plus courte.*

___
À partir d'ici nous allons décrire les fonctions destinées aux enseignants. Pour chaque année, un notebook `MethNum-Dashboard.md` est fourni.
Cette interface graphique fournit une vue simplifiée des commandes ci-dessous pour faciliter le travail routinier de la correction de copies. 
Les commandes exposées ci-dessous permettent de réaliser du débogage par lignes de commande.
___



### Ramasser les travaux : collect

Un enseignant peut récupérer tous les travaux de son groupe via la commande :
```
methnum collect_for_nbgrader L1/Seance1 GROUPE
```
Les copies sont téléchargées dans un dossier nommé `./submitted`. Techniquement, par cette commande l'enseignant recherche tous les *forks* du sujet posté dans le dépôt https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1/GROUPE/Seance1. L'enseignant peut les voir sur le web en cliquant sur le nombre à côté du symbôle *fork* du dépôt vierge, ou après le `collect` dans le dossier `./submitted`.


### Ramasser les notes issues de la correction automatique : collect_autograded et merge_autograded_db

Un enseignant peut récupérer tous les travaux de son groupe via la commande :
```
methnum collect_autograded L1/Seance1 GROUPE
```
Les copies sont téléchargées dans un dossier nommé `./autograded`. Techniquement, par cette commande l'enseignant recherche tous les *forks* du sujet posté dans le dépôt https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1/GROUPE/Seance1. 
La correction automatique a eu lieu par intégration continue sur le serveur gitlab lors du dernier `submit`. 
Pour chaque *fork* détecté, les artefacts sont téléchargés dans le dossier nommé `./autograded`, en particulier la base de données contenant l'exécution du notebook et les notes automatiques (`.gradebook.db`).

Afin de fusionner ces notes individuelles avec la base de données de notes locale de l'enseignant, il faut ensuite taper : 
```
methnum merge_autograded_db Seance1  # ne pas mettre L1
```
Les trois commandes précédentes ont été fusionnées dans le bouton `collect` fourni avec le `MethNum-Dashboard.md` de l'UE.

### Noter manuellement les travaux : formgrader

Pour lancer l'interface de correction manuelle, il faut taper la commande :
```
methnum formgrader Seance1  # ne pas mettre L1
```
puis se laisser guider par l'interface de [`nbgrader`](https://nbgrader.readthedocs.io/en/stable/).

Pour commencer à corriger la série de copies, il faut cliquer sur `Seance1` et ensuite sur "Submission #1". 

*NB : à noter que si vous voulez voir le nom de l'élève, cliquer sur le petit œil à côté.*

Corriger la copie en cliquant sur "Full credit", "No credit", les petites flèches, ou "extra credit", ajouter des commentaires dans les cases dédiées. 
- *Le gros point d'interrogation en bas à droite propose des raccourcis clavier (Tab par exemple)*
    
* *Si l'enseignant souhaite debugger une réponse, la page html ne permet pas de le faire, par contre aller dans le navigateur du serveur Jupyter (onglet précédent) et naviguer dans `./submitted/PRENOM.NOM/Examen/ et lancer le notebook de PRENOM.NOM.*

Pour passer à la copie suivante, cliquer en haut sur "Next" et recommencer.



Une fois la correction manuelle réalisée, la base de données locale de l'enseignant `.gradebook.db` contient les notes et commentaires pour chaque évaluation et chaque étudiant.



### Envoyer les résultats : generate_feedback et release_feedback

La commande `generate_feedback` permet de fabriquer des fichiers .html représentant les copies notées et annotées dans le dossier `./feedback` :
```
methnum generate_feedback L1/Seance1 *TAG*
```
où le wildcard `*TAG* ` peut être rien, ou un nom d'étudiant, complété ou non par un wildcard.

Puis, la commande : 
```
methnum release_feedback L1/Seance1 *TAG*
```
découpe la base de données de notes locale pour déposer un fichier `.gradebook.db` propre à chaque étudiant dans le dossier `autograded`.
La commande réalise ensuite un `submit` au nom de l'enseignant dans le dépôt de l'étudiant avec ce fichier de note. L'intégration continue permet aussi de générer de nouveaux artefacts,
contenant cette fois-ci la copie notée et annotée complète.

### Récupérer la copie notée : fetch_feedback

L'étudiant peut récupérer sa copie notée et commentée par la commande :
```
methnum fetch_feedback L1/Seance1
```
Un dossier `feedback` apparait dans son dossier `MethNum/L1/Seance1` avec notamment des fichiers .html pour voir les commentaires de l'enseignant et les points par question.


### Un soucis avec une copie : autograde

Certaines copies peuvent avoir eu un soucis lors de l'intégration continue, par exemple une boucle infinie. Dans ce cas, il faut trouver
les lignes de code problématiques dans le notebook situé dans le dossier `submitted`, les corriger, et taper la commande :
```
methnum autograde L1/Seance1 *TAG*
```
où `*TAG*` est un mot clé désignant la copie de l'étudiant (`prenom.nom` par exemple). Cette commande réalise un `submit` au nom de l'enseignant,
attend la fin de la correction automatique, récupère le nouveau `.gradebook.db` de l'étudiant et le fusionne avec la base de données de l'enseignant.
Si le problème a été résolu, l'enseignant peut passer à la correction manuelle avec le `formgrader`.


Un dossier `./autograded` est généré. L'enseignant est libre de rajouter un mot clé pour ne récupérer que les évaluations dont le nom du soumetteur contient la chaine de caractères TAG (astérisques autoriés), par exemple MP1* pour ne récupérer que les copies du groupe MP1, ou *jean * pour récupérer les copies portant le nom de jean.

Lancer un serveur jupyter, puis cliquer sur le sous-onglet "Formgrader" puis dans la colonne "# Submissions" cliquer sur le nombre qui correspond à la ligne "Examen" par exemple.
   


**Rappel: aucun document contenant des noms d'étudiants ne doit être posté sur le gitlab enseignant.**



### Création de contenu : generate_assignment

Une séance de cours doit être placé dans un dossier du dépôt enseignant. Le nom du dossier est la clé pour retrouver cette séquence pédagogique dans toute la suite de l'UE.

Pour créer un jupyter notebook qui sera évaluable par la librairie nbgrader, il faut indiquer dans le notebook quelles cellules contiennent des réponses et combien de points elles valent. 
Pour cela, aller dans le menu Affichage -> Barre d'outil de cellules -> Create Assignment. Des bandeaux bleus apparaissent au-dessus des cellules dans lesquels un barême peut être préciser. 

Il est conseillé de mettre la cellule en mode 
* "Read only" si elle contient du simple texte, 
* "Manually graded task" si elle contient des consignes, 
* "Autograded answer" si elle contient des réponses sous forme de code,
* "Autograded test" si elle contient des tests pour la notation automatique,
* "Manually graded answer" si elle contient des réponses sous forme de texte.

Toute cellule contenant des réponses doit avoir les réponses à retirer placées entre les balises `### BEGIN SOLUTION ... ### END SOLUTION`. 

L'enseignant peut aussi donner des indications de notations à ces collègues dans les cellules de consigne avec les balises `### BEGIN MARK SCHEME ... ### END MARK SCHEME`.

Concernant les tests, il faut les penser le plus robuste possible et donc bien rédiger la consigne. Des tests peuvent rester visibles pour l'étudiant.
D'autres peuvent être cachés s'ils sont placés entre les balises `### BEGIN HIDDEN TESTS ... END HIDDEN TESTS`.

Pour générer la séance de cours vierge de solutions, l'enseignant tape la commande : 
```
methnum generate_assignment L1/Seance1
```
Cette commande fonctionne rarement du premier coup, car il est très facile d'oublier des balises ou d'avoir oublié de mettre une cellule en "Autograded answer" alors qu'elle contient des balises `### BEGIN SOLUTION`. Bien lire le message d'erreur
rapporté par la commande et chercher la cellule qui pose un soucis. Quand tout est prêt, la séance version enseignante est dans le dossier `source/Seance1`
tandis que la version étudiante est dans le dossier `release/Seance1`. Elle contient aussi un fichier `.gitlab-ci.yml` configurant
les étapes de l'intégration conitnue réalisée lors d'un `submit`. Le détail de ce fichier est éditable à la fin du fichier `__init__.py` contenu dans le dépôt https://gitlab.dsi.universite-paris-saclay.fr/MethNum/scripts.

### Distribuer une séance sur gitlab : release


Quand le sujet du cours est prêt, il faut poster les documents de la séance sans les réponses dans le groupe gitlab 
accessible aux étudiants :

https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1

Pour cela, il faut exécuter la commande suivante :
```
methnum release L1/Seance1 public/private
```
Ce script:
1. poste la séance avec solutions dans le gitlab enseignant. 
2. poste la séance sans solutions dans le gitlab étudiant
 
Si le mot "Seance" n'est pas présent dans le nom du sous-répertoire, le script propose de poster le sujet en mode private (inaccessible aux étudiants) ou public (accessible). Cela permet de tester l'envoi d'un sujet d'évaluation sans le rendre disponible. 
Ne pas oublier de reposter le sujet une dernière fois en mode public pour le rendre accessible !

Vérifier ici https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1 :
1. que le sujet est bien posté
2. **qu'il ne contient pas les solutions !**

Le fait de poster sur le gitlab enseignant exécute un script d'intégration continue `.gitlab-ci.yml`, lequel lance le script `make_website.sh`.
Ce dernier génère le site web associé au cours à la volée avec le nouveau contenu. L'URL du site web est donné dans la page web du dépôt enseignant, pui Settings -> Pages.

Quelques scripts supplémentaires peuvent aider à la création de contenus.

#### remove_solution

Ce script exécute simplement les deux premières étapes du script ``generate_assignment`` avec une nomenclature plus souple, pour par exemple créer des projets python sous forme de jupyter notebook sans leurs solutions et sans nécessité de le poster. La syntaxe est :
```
methnum remove_solution MONSUJET
```
où MONSUJET est un dossier contenant le ou les notebooks dont on veut retirer les solutions.

#### convert_beamer_to_ipynb

Ce paragraphe ne concerne que les séances qui sont en format latex et doivent être converties en jupyter notebook.
```
python scripts/bin/convert_beamer_to_ipynb.py -f Seance1/SEANCE_1.tex --title "Séance 1 : types et variables"
```
Cette commande produit le fichier Markdown `Seance1/SEANCE_1.md`. Il y a probablement des erreurs de conversion à reprendre, mais en général il vaut mieux simplifier la structure de la slide du .tex et recommencer la conversion jusqu'à obtenir un résultat convenable.

Pour information, ce script est utilisé actuellement pour générer le site web du cours à partir des fichiers latex.


### Commencer une nouvelle année 

Pour commencer une nouvelle année, il faut créer un nouveau groupe `20XX-20XX+1` sur gitlab https://gitlab.dsi.universite-paris-saclay.fr/MethNum.
Puis créer les sous-groupes par filière `L1`, `L2` et `L3`. Ces dépôts doivent être publics. Ensuite, rajouter les enseignants en tant que membres du groupe principal
`20XX-20XX+1`, avec le statut de Développeur. Dans les dépôts enseignants, rajouter le groupe `20XX-20XX+1` en tant que membre du dépôt.

Puis dans les scripts de l'UE (https://gitlab.dsi.universite-paris-saclay.fr/MethNum/scripts), éditer la fin du fichier
`__init__.py` avec les nouvelles informations.

On peut toujours rajouter des enseignants en cours d'année, en les invitant au groupe principal `20XX-20XX+1`. En revanche, ainsi ils n'auront pas accès aux dépôts étudiants postés avant leur inscription. Pour leur donner cet accès a posteriori, recopier ce script, l'adapter et le lancer de n'importe quelle plateforme avec `methnum`:
```
from methnum_lib import course

group = "LDD-STAPS"  # le nom du groupe
assignments = ["L2/Seance3", "L2/Seance4", "L2/DM1"]  # les seances anterieures a l'inscription
for assignment in assignments:
    course.ensure_instructor_access(assignment, student_group=group)
```


## FAQ

- Dans une salle de cours, en lançant `methnum jupyter notebook` Firefox renvoie une page d'erreur disant ne pas pouvoir se connecter. Que fais-je?

*Il faut aller dans les Préférences de Firefox, menu Général et tout en bas Paramètres Réseau. Cliquer sur Paramètres et Détection automatique du proxy. Relancer la commande.*

- La commande `methnum jupyter notebook` renvoie 

        [NotebookApp] The version of the Assignment List nbextension does not match the server extension; the nbextension version is 0.5.5 while the server version is 0.6.0.dev. This can happen if you have recently upgraded nbgrader, and may cause this extension to not work correctly. To fix the problem, please see the nbgrader installation instructions: http://nbgrader.readthedocs.io/en/stable/user_guide/installation.html
        
    Que faire ?
    
*Lancer `methnum update`.*   

- En lançant l'autograde, le terminal m'informe que la correction a échoué pour certaines copies. Comment investiger ?

*Ouvrir l'interface de correction avec `methnum jupyter notebook`, onglet Formgrader puis cliquer sur le nombre de soumissions du devoir.
Les copies en question indiquent "needs autograding". Pour chacune d'entre elles, cliquer sur le petit éclair bleu (qui lance l'autograde) à droite et étudier les messages d'erreur. Réparer la copie en la retrouvant dans le dossier `submitted` et rappuyer sur l'éclair jusqu'à ce que le problème soit corrigé.*

- L'autograde me renvoie un message du type suivant. Que faire ?

        [WARNING] Attribute 'cell_type' for cell cell-7bcf63f282d8b3be has changed! (should be: code, got: markdown)
        [ERROR] There was an error processing assignment: /Users/.../submitted/groupe.prenom.nom/Seance1
        [ERROR] Traceback (most recent call last):
            [...]
            nbformat.validator.NotebookValidationError: 'id' is a required property
            
            Failed validating 'required' in notebook:
            
            On instance:
            {'cell_type': 'code',
             'execution_count': None,
             'metadata': {'deletable': False,
                          'nbgrader': {'cell_type': 'code',
                                       'checksum': 'b8b252f10b3ed0ab912009c790261954',
                                       'grade': True,
                                       'grade_id': 'cell-7bcf63f282d8b3be',
                                       'locked': False,
                                       'points': 1,
                                       'schema_version': 3,
                                       'solution': True}},
             'outputs': ['...0 outputs...'],
             'source': 'a=90\nimport math\nb=(math.pi/180)\nprint(a*b)\n'}

*La première ligne du message signifie qu'une cellule notée en tant que code a été changée par l'étudiant en markdown. La dernière ligne du message donne idée du contenu de la cellule fautive, et le grade_id son numéro.
  Ouvrir le notebook problématique, avec l'affichage de l'interface nbgrader : Affichage -> Barre d'outil de cellule -> Create Assignment. Chercher la cellule incriminée portant le grade_id du messsage d'erreur et le contenu indiqué. Changer son type en code (menu déroulant Markdown), sauvegarder la copie et relancer l'autograde.*

- L'autograde me renvoie un message du type suivant. Que faire ?

        [AutogradeApp | INFO] Converting notebook /builds/prenom.nom/MethNum-L1-Seance1/submitted/prenom.nom/Seance1/TD1.ipynb
        [AutogradeApp | WARNING] Cell with id 'cell-0dfd76d62c0f40f2' exists multiple times!
        [AutogradeApp | WARNING] Attribute 'checksum' for cell cell-9cfba94efb70a639 has changed! (should be: 18570bd54e48c8ab4f372594127fdfb7, got: 3b743df83e44762f3895e6aa7e195b8f)
        [AutogradeApp | WARNING] Attribute 'checksum' for cell cell-0e1be44ae6598166 has changed! (should be: 189286c222d66b26a16d86d8d147df84, got: 524b43ad1a6532257309e7824ad3120a)
        ...
        [AutogradeApp | WARNING] Attribute 'checksum' for cell cell-580cf6b6893a7258 has changed! (should be: e4b39430d4055c5379a33aef4e55f1da, got: bf22dd41ab8bb922288c3ca510552f3d)
        [AutogradeApp | WARNING] Removing failed assignment: /builds/alex.pierron/MethNum-L3-Seance4/autograded/alex.pierron/Seance4
        [AutogradeApp | ERROR] One or more notebooks in the assignment use an old version 
            of the nbgrader metadata format. Please **back up your class files 
            directory** and then update the metadata using:
      
            nbgrader update .
      
*Hélas la dernière ligne ne donne pas la bonne manière de corriger ce soucis. En revanche, la seconde avec `cell exists multiple times` est le vrai problème.
Ouvrir le notebook problématique, avec l'affichage de l'interface nbgrader : Affichage -> Barre d'outil de cellule -> Create Assignment. Chercher la cellule incriminée portant le grade_id du messsage d'erreur et le contenu indiqué. Une fois la cellule en double repérée, ouvrir le notebook version MarkDown avec un éditeur de texte de votre choix et supprimer la cellule en double. Relancer l'autograde.*



## License

Le contenu de ce projet est soumis à la licence [BSD 3-clause "New"](LICENSE).


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "methnum",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "J\u00e9r\u00e9my Neveu <jeremy.neveu@universite-paris-saclay.fr>",
    "keywords": null,
    "author": "J\u00e9r\u00e9my Neveu, Nicolas M. Thi\u00e9ry",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/05/31/52dc8900d726760e8801e0c5113033b265c296aeff1fecb90208f0b5c1fe/methnum-3.0.dev1.tar.gz",
    "platform": null,
    "description": "# Environnement MethNum\n\n## Pr\u00e9sentation\n\nL'environnement `methnum` est une adaptation de la librairie g\u00e9n\u00e9rique [`travo`](https://gitlab.com/travo-cr/travo/) au cours de M\u00e9thodes Num\u00e9riques de l'Universit\u00e9 Paris-Saclay.\nCette suite de scripts est install\u00e9e pour tous sur le [JupyterHub](https://jupyterhub.ijclab.in2p3.fr/) de l'Universit\u00e9 Paris-Saclay, et permet aux \u00e9tudiants de t\u00e9l\u00e9charger et de soumettre leurs travaux num\u00e9riques, et aux enseignants de collecter les copies, les corriger, les annoter et les retourner aux \u00e9tudiants. \nLes technologies au c\u0153ur de cette architecture sont [`gitlab`](https://gitlab.dsi.universite-paris-saclay.fr/MethNum) et [`nbgrader`](https://nbgrader.readthedocs.io/en/stable/).\n\n\n\n## <a name=\"install\"></a> Installation de l'environnement methnum\n\nL'environnement `methnum` est nativement install\u00e9 sur le [JupyterHub](https://jupyterhub.ijclab.in2p3.fr/) de l'Universit\u00e9 Paris-Saclay.\nIl est conseill\u00e9 d'utiliser cette plateforme pour avoir un environnement ma\u00eetris\u00e9 et commmun \u00e0 toute l'\u00e9quipe p\u00e9dagogique. \nA des fins de d\u00e9veloppement ou de gestion fine des enseignements, il peut toutefois \u00eatre install\u00e9 simplement sur des ordinateurs individuels via une installation de [`miniconda`](https://docs.conda.io/en/latest/miniconda.html).\n\n### Installation de miniconda\n\nT\u00e9l\u00e9charger l'installeur Miniconda depuis ce site : \nhttps://conda.io/docs/user-guide/install/index.html\net suivre l'installation.\n\n### Installation des scripts methnum\n\nIl est conseill\u00e9 de d\u00e9velopper le cours dans le m\u00eame environnement python que celui fournit aux \u00e9tudiants. Pour cela il faut installer python via *Anaconda* (https://www.anaconda.com/download/). Si l'installation de python a \u00e9t\u00e9 r\u00e9alis\u00e9e via Anaconda, t\u00e9l\u00e9chargez le r\u00e9pertoire qui contient les scripts du cours\u00a0:\n```\ngit clone https://gitlab.dsi.universite-paris-saclay.fr/MethNum/ComputerLab ComputerLab\ncd ComputerLab\n```\npuis tapez :\n```\nconda env create -f .scripts/environment.yml\njupyter nbextension install --sys-prefix --py nbgrader --overwrite\njupyter nbextension enable --sys-prefix --py nbgrader\njupyter serverextension enable --sys-prefix --py nbgrader\n```\nPuis, il faut activer l'environnement `methnum` par :\n```\nconda activate methnum\n```\nDans l'\u00e9ventualit\u00e9 o\u00f9 une nouvelle version des scripts ou de l'environnement est disponible, mettez \u00e0 jour votre copie de `ComputerLab`:\n```\ncd ComputerLab\ngit pull\n```\npuis tapez :\n```\nconda env update -n methnum -f .scripts/environment.yml --prune # installation du nouvel environnement\n```\n:::{tip}\n# Mamba\nAu lieu de Miniconda, vous pouvez installer [Minimamba](https://mamba.readthedocs.io/en/latest/micromamba-installation.html#umamba-install). Remplacez toutes les\ncommandes ci-dessus `conda` par `mamba` et vous verrez que l'environnement `methnum` s'installe bien plus rapidement !\n:::\n\n\n:::{note}\n:class: dropdown\n# Installation en salle de TP\n\nCes commandes peuvent \u00eatre n\u00e9cessaires au SIF pour mettre \u00e0 jour l'environnement utilis\u00e9 par les \u00e9tudiants ***dans toutes les salles de TP de l'universit\u00e9***.\n```\nssh -Y prenom.nom@ssh2.pgip.universite-paris-saclay.fr\ncd MethNum/ComputerLab  # a cloner si absent\n/public/methnum/miniconda3/bin/mamba env update -f .scripts/environment.yml --prune\n```\n:::\n\n:::{note} \n:class: dropdown\n# Survivre sans `conda`\n\nIl est possible de participer au cours sans une installation de miniconda, en cr\u00e9ant un environnement virtuel ou non. Une diff\u00e9rence majeure sera que les scripts li\u00e9s \u00e0 methnum ne seront pas dans le PYTHONPATH, donc pour la plupart des commandes ci-dessous il faudra rajouter le chemin complet des scripts `.scripts/bin/monscript`. Les librairies du cours sont installables avec la commande `pip install -r .scripts/environement.yml`.\n:::\n\n## Description des scripts principaux fournis avec methnum\n\n### T\u00e9l\u00e9chargement d'une s\u00e9ance : fetch\n\nEtudiants et enseignants peuvent t\u00e9l\u00e9charger un sujet sans r\u00e9ponse en tapant une premi\u00e8re fois\u00a0:\n```\nmethnum fetch L1/Seance1 GROUPE\n```\nLa s\u00e9ance est automatiquement plac\u00e9e dans un dossier `MethNum` plac\u00e9 dans le `$HOME`. **Ce dossier ne doit pas \u00eatre d\u00e9plac\u00e9 ni renomm\u00e9.** Techniquement, la personne qui ex\u00e9cute cette commande r\u00e9alise un *fork* du d\u00e9p\u00f4t gitlab public.\n\nSur les ordinateurs de l'universit\u00e9, il faut ensuite lancer un serveur jupyter avec\u00a0:\n```\nmethnum jupyter notebook\n```\nCette commande n'est pas n\u00e9cessaire sur le jupyterhub.\n\n### Poster ses r\u00e9ponses : submit\n\nUne s\u00e9ance dont les r\u00e9ponses ont \u00e9t\u00e9 partiellement ou totalement rentr\u00e9es peut \u00eatre post\u00e9e \nsur un [d\u00e9p\u00f4t gitlab personnel priv\u00e9](https://gitlab.dsi.universite-paris-saclay.fr/) autant de fois \nque n\u00e9cessaire par la commande :\n```\nmethnum submit L1/Seance1 GROUPE\n```\nSi le d\u00e9p\u00f4t n'existe pas au premier `submit`, il est cr\u00e9\u00e9, et les droits de lecture et \u00e9criture sont donn\u00e9s aux enseignants, mais pas aux autres \u00e9tudiants.\nLa notion de groupe ici est tr\u00e8s importante, car elle permet \u00e0 l'enseignant r\u00e9f\u00e9rent du groupe de ne r\u00e9cup\u00e9rer que ses copies : le d\u00e9p\u00f4t personnel de l'\u00e9tudiant est cr\u00e9\u00e9 avec un lien de *fork* avec le d\u00e9p\u00f4t commun \u00e0 son groupe contenant les sujets.\n\n\u00c0 partir du premier `submit`, toute future commande `fetch` va t\u00e9l\u00e9charger la s\u00e9ance depuis le gitlab personnel et non depuis le d\u00e9p\u00f4t public qui contient les sujets vierges. Cela permet de se servir de son d\u00e9p\u00f4t gitlab comme d'un d\u00e9p\u00f4t de sauvegarde en ligne pour transf\u00e9rer son travail d'une plateforme \u00e0 une autre (voir sch\u00e9ma ci-dessous).\n\n<img src=\"figures/methnum_structure.png\" alt=\"Markdown Monster icon\" style=\"float: left; margin-right: 10px;\" />\n\n### Lancer la correction automatique : student_autograde et force_autograde\n\nLors d'un `submit`, une nouvelle version de la copie de l'\u00e9tudiant est post\u00e9e sur son d\u00e9p\u00f4t personnel. Si un fichier `.gitlab-ci.yaml` est pr\u00e9sent, le serveur lance un \nprocessus d'int\u00e9gration continue, qui fait appel \u00e0 la fonction `student_autograde` : celle-ci lance la proc\u00e9dure de correction automatique et g\u00e9n\u00e8re des *artefacts*. Ces derniers sont les\nfichiers de sortie g\u00e9n\u00e9r\u00e9s pas la notation automatique, \u00e0 savoir essentiellement le fichier contenant l'ex\u00e9cution du notebook (`TD1.ipynb` par exemple) et le base de donn\u00e9es contenant les notes (`.gradebook.db`).\nCes artefacts sont expos\u00e9s sur le web dans la rubrique \"CI/CD\" du d\u00e9p\u00f4t gitlab de l'\u00e9tudiant, en cliquant sur le dernier job lanc\u00e9 puis *Browse* \u00e0 droite.\n\nEn cas de n\u00e9cessit\u00e9, il est possible de forcer le lancement de la correction automatique par l'enseignant via la commande :\n```\nmethnum force_autograde L1/Seance1 GROUPE\n```\n*NB : l'int\u00e9gration continue a un temps maximal d'ex\u00e9cution de 10 minutes, \nil faut donc veiller \u00e0 proposer des devoirs dont l'ex\u00e9cution est plus courte.*\n\n___\n\u00c0 partir d'ici nous allons d\u00e9crire les fonctions destin\u00e9es aux enseignants. Pour chaque ann\u00e9e, un notebook `MethNum-Dashboard.md` est fourni.\nCette interface graphique fournit une vue simplifi\u00e9e des commandes ci-dessous pour faciliter le travail routinier de la correction de copies. \nLes commandes expos\u00e9es ci-dessous permettent de r\u00e9aliser du d\u00e9bogage par lignes de commande.\n___\n\n\n\n### Ramasser les travaux : collect\n\nUn enseignant peut r\u00e9cup\u00e9rer tous les travaux de son groupe via la commande :\n```\nmethnum collect_for_nbgrader L1/Seance1 GROUPE\n```\nLes copies sont t\u00e9l\u00e9charg\u00e9es dans un dossier nomm\u00e9 `./submitted`. Techniquement, par cette commande l'enseignant recherche tous les *forks* du sujet post\u00e9 dans le d\u00e9p\u00f4t https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1/GROUPE/Seance1. L'enseignant peut les voir sur le web en cliquant sur le nombre \u00e0 c\u00f4t\u00e9 du symb\u00f4le *fork* du d\u00e9p\u00f4t vierge, ou apr\u00e8s le `collect` dans le dossier `./submitted`.\n\n\n### Ramasser les notes issues de la correction automatique : collect_autograded et merge_autograded_db\n\nUn enseignant peut r\u00e9cup\u00e9rer tous les travaux de son groupe via la commande :\n```\nmethnum collect_autograded L1/Seance1 GROUPE\n```\nLes copies sont t\u00e9l\u00e9charg\u00e9es dans un dossier nomm\u00e9 `./autograded`. Techniquement, par cette commande l'enseignant recherche tous les *forks* du sujet post\u00e9 dans le d\u00e9p\u00f4t https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1/GROUPE/Seance1. \nLa correction automatique a eu lieu par int\u00e9gration continue sur le serveur gitlab lors du dernier `submit`. \nPour chaque *fork* d\u00e9tect\u00e9, les artefacts sont t\u00e9l\u00e9charg\u00e9s dans le dossier nomm\u00e9 `./autograded`, en particulier la base de donn\u00e9es contenant l'ex\u00e9cution du notebook et les notes automatiques (`.gradebook.db`).\n\nAfin de fusionner ces notes individuelles avec la base de donn\u00e9es de notes locale de l'enseignant, il faut ensuite taper : \n```\nmethnum merge_autograded_db Seance1  # ne pas mettre L1\n```\nLes trois commandes pr\u00e9c\u00e9dentes ont \u00e9t\u00e9 fusionn\u00e9es dans le bouton `collect` fourni avec le `MethNum-Dashboard.md` de l'UE.\n\n### Noter manuellement les travaux : formgrader\n\nPour lancer l'interface de correction manuelle, il faut taper la commande :\n```\nmethnum formgrader Seance1  # ne pas mettre L1\n```\npuis se laisser guider par l'interface de [`nbgrader`](https://nbgrader.readthedocs.io/en/stable/).\n\nPour commencer \u00e0 corriger la s\u00e9rie de copies, il faut cliquer sur `Seance1` et ensuite sur \"Submission #1\". \n\n*NB : \u00e0 noter que si vous voulez voir le nom de l'\u00e9l\u00e8ve, cliquer sur le petit \u0153il \u00e0 c\u00f4t\u00e9.*\n\nCorriger la copie en cliquant sur \"Full credit\", \"No credit\", les petites fl\u00e8ches, ou \"extra credit\", ajouter des commentaires dans les cases d\u00e9di\u00e9es. \n- *Le gros point d'interrogation en bas \u00e0 droite propose des raccourcis clavier (Tab par exemple)*\n    \n* *Si l'enseignant souhaite debugger une r\u00e9ponse, la page html ne permet pas de le faire, par contre aller dans le navigateur du serveur Jupyter (onglet pr\u00e9c\u00e9dent) et naviguer dans `./submitted/PRENOM.NOM/Examen/ et lancer le notebook de PRENOM.NOM.*\n\nPour passer \u00e0 la copie suivante, cliquer en haut sur \"Next\" et recommencer.\n\n\n\nUne fois la correction manuelle r\u00e9alis\u00e9e, la base de donn\u00e9es locale de l'enseignant `.gradebook.db` contient les notes et commentaires pour chaque \u00e9valuation et chaque \u00e9tudiant.\n\n\n\n### Envoyer les r\u00e9sultats : generate_feedback et release_feedback\n\nLa commande `generate_feedback` permet de fabriquer des fichiers .html repr\u00e9sentant les copies not\u00e9es et annot\u00e9es dans le dossier `./feedback` :\n```\nmethnum generate_feedback L1/Seance1 *TAG*\n```\no\u00f9 le wildcard `*TAG* ` peut \u00eatre rien, ou un nom d'\u00e9tudiant, compl\u00e9t\u00e9 ou non par un wildcard.\n\nPuis, la commande : \n```\nmethnum release_feedback L1/Seance1 *TAG*\n```\nd\u00e9coupe la base de donn\u00e9es de notes locale pour d\u00e9poser un fichier `.gradebook.db` propre \u00e0 chaque \u00e9tudiant dans le dossier `autograded`.\nLa commande r\u00e9alise ensuite un `submit` au nom de l'enseignant dans le d\u00e9p\u00f4t de l'\u00e9tudiant avec ce fichier de note. L'int\u00e9gration continue permet aussi de g\u00e9n\u00e9rer de nouveaux artefacts,\ncontenant cette fois-ci la copie not\u00e9e et annot\u00e9e compl\u00e8te.\n\n### R\u00e9cup\u00e9rer la copie not\u00e9e : fetch_feedback\n\nL'\u00e9tudiant peut r\u00e9cup\u00e9rer sa copie not\u00e9e et comment\u00e9e par la commande :\n```\nmethnum fetch_feedback L1/Seance1\n```\nUn dossier `feedback` apparait dans son dossier `MethNum/L1/Seance1` avec notamment des fichiers .html pour voir les commentaires de l'enseignant et les points par question.\n\n\n### Un soucis avec une copie : autograde\n\nCertaines copies peuvent avoir eu un soucis lors de l'int\u00e9gration continue, par exemple une boucle infinie. Dans ce cas, il faut trouver\nles lignes de code probl\u00e9matiques dans le notebook situ\u00e9 dans le dossier `submitted`, les corriger, et taper la commande :\n```\nmethnum autograde L1/Seance1 *TAG*\n```\no\u00f9 `*TAG*` est un mot cl\u00e9 d\u00e9signant la copie de l'\u00e9tudiant (`prenom.nom` par exemple). Cette commande r\u00e9alise un `submit` au nom de l'enseignant,\nattend la fin de la correction automatique, r\u00e9cup\u00e8re le nouveau `.gradebook.db` de l'\u00e9tudiant et le fusionne avec la base de donn\u00e9es de l'enseignant.\nSi le probl\u00e8me a \u00e9t\u00e9 r\u00e9solu, l'enseignant peut passer \u00e0 la correction manuelle avec le `formgrader`.\n\n\nUn dossier `./autograded` est g\u00e9n\u00e9r\u00e9. L'enseignant est libre de rajouter un mot cl\u00e9 pour ne r\u00e9cup\u00e9rer que les \u00e9valuations dont le nom du soumetteur contient la chaine de caract\u00e8res TAG (ast\u00e9risques autori\u00e9s), par exemple MP1* pour ne r\u00e9cup\u00e9rer que les copies du groupe MP1, ou *jean * pour r\u00e9cup\u00e9rer les copies portant le nom de jean.\n\nLancer un serveur jupyter, puis cliquer sur le sous-onglet \"Formgrader\" puis dans la colonne \"# Submissions\" cliquer sur le nombre qui correspond \u00e0 la ligne \"Examen\" par exemple.\n   \n\n\n**Rappel: aucun document contenant des noms d'\u00e9tudiants ne doit \u00eatre post\u00e9 sur le gitlab enseignant.**\n\n\n\n### Cr\u00e9ation de contenu : generate_assignment\n\nUne s\u00e9ance de cours doit \u00eatre plac\u00e9 dans un dossier du d\u00e9p\u00f4t enseignant. Le nom du dossier est la cl\u00e9 pour retrouver cette s\u00e9quence p\u00e9dagogique dans toute la suite de l'UE.\n\nPour cr\u00e9er un jupyter notebook qui sera \u00e9valuable par la librairie nbgrader, il faut indiquer dans le notebook quelles cellules contiennent des r\u00e9ponses et combien de points elles valent. \nPour cela, aller dans le menu Affichage -> Barre d'outil de cellules -> Create Assignment. Des bandeaux bleus apparaissent au-dessus des cellules dans lesquels un bar\u00eame peut \u00eatre pr\u00e9ciser. \n\nIl est conseill\u00e9 de mettre la cellule en mode \n* \"Read only\" si elle contient du simple texte, \n* \"Manually graded task\" si elle contient des consignes, \n* \"Autograded answer\" si elle contient des r\u00e9ponses sous forme de code,\n* \"Autograded test\" si elle contient des tests pour la notation automatique,\n* \"Manually graded answer\" si elle contient des r\u00e9ponses sous forme de texte.\n\nToute cellule contenant des r\u00e9ponses doit avoir les r\u00e9ponses \u00e0 retirer plac\u00e9es entre les balises `### BEGIN SOLUTION ... ### END SOLUTION`. \n\nL'enseignant peut aussi donner des indications de notations \u00e0 ces coll\u00e8gues dans les cellules de consigne avec les balises `### BEGIN MARK SCHEME ... ### END MARK SCHEME`.\n\nConcernant les tests, il faut les penser le plus robuste possible et donc bien r\u00e9diger la consigne. Des tests peuvent rester visibles pour l'\u00e9tudiant.\nD'autres peuvent \u00eatre cach\u00e9s s'ils sont plac\u00e9s entre les balises `### BEGIN HIDDEN TESTS ... END HIDDEN TESTS`.\n\nPour g\u00e9n\u00e9rer la s\u00e9ance de cours vierge de solutions, l'enseignant tape la commande : \n```\nmethnum generate_assignment L1/Seance1\n```\nCette commande fonctionne rarement du premier coup, car il est tr\u00e8s facile d'oublier des balises ou d'avoir oubli\u00e9 de mettre une cellule en \"Autograded answer\" alors qu'elle contient des balises `### BEGIN SOLUTION`. Bien lire le message d'erreur\nrapport\u00e9 par la commande et chercher la cellule qui pose un soucis. Quand tout est pr\u00eat, la s\u00e9ance version enseignante est dans le dossier `source/Seance1`\ntandis que la version \u00e9tudiante est dans le dossier `release/Seance1`. Elle contient aussi un fichier `.gitlab-ci.yml` configurant\nles \u00e9tapes de l'int\u00e9gration conitnue r\u00e9alis\u00e9e lors d'un `submit`. Le d\u00e9tail de ce fichier est \u00e9ditable \u00e0 la fin du fichier `__init__.py` contenu dans le d\u00e9p\u00f4t https://gitlab.dsi.universite-paris-saclay.fr/MethNum/scripts.\n\n### Distribuer une s\u00e9ance sur gitlab : release\n\n\nQuand le sujet du cours est pr\u00eat, il faut poster les documents de la s\u00e9ance sans les r\u00e9ponses dans le groupe gitlab \naccessible aux \u00e9tudiants :\n\nhttps://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1\n\nPour cela, il faut ex\u00e9cuter la commande suivante :\n```\nmethnum release L1/Seance1 public/private\n```\nCe script:\n1. poste la s\u00e9ance avec solutions dans le gitlab enseignant. \n2. poste la s\u00e9ance sans solutions dans le gitlab \u00e9tudiant\n \nSi le mot \"Seance\" n'est pas pr\u00e9sent dans le nom du sous-r\u00e9pertoire, le script propose de poster le sujet en mode private (inaccessible aux \u00e9tudiants) ou public (accessible). Cela permet de tester l'envoi d'un sujet d'\u00e9valuation sans le rendre disponible. \nNe pas oublier de reposter le sujet une derni\u00e8re fois en mode public pour le rendre accessible !\n\nV\u00e9rifier ici https://gitlab.dsi.universite-paris-saclay.fr/MethNum/2020-2021/L1 :\n1. que le sujet est bien post\u00e9\n2. **qu'il ne contient pas les solutions !**\n\nLe fait de poster sur le gitlab enseignant ex\u00e9cute un script d'int\u00e9gration continue `.gitlab-ci.yml`, lequel lance le script `make_website.sh`.\nCe dernier g\u00e9n\u00e8re le site web associ\u00e9 au cours \u00e0 la vol\u00e9e avec le nouveau contenu. L'URL du site web est donn\u00e9 dans la page web du d\u00e9p\u00f4t enseignant, pui Settings -> Pages.\n\nQuelques scripts suppl\u00e9mentaires peuvent aider \u00e0 la cr\u00e9ation de contenus.\n\n#### remove_solution\n\nCe script ex\u00e9cute simplement les deux premi\u00e8res \u00e9tapes du script ``generate_assignment`` avec une nomenclature plus souple, pour par exemple cr\u00e9er des projets python sous forme de jupyter notebook sans leurs solutions et sans n\u00e9cessit\u00e9 de le poster. La syntaxe est :\n```\nmethnum remove_solution MONSUJET\n```\no\u00f9 MONSUJET est un dossier contenant le ou les notebooks dont on veut retirer les solutions.\n\n#### convert_beamer_to_ipynb\n\nCe paragraphe ne concerne que les s\u00e9ances qui sont en format latex et doivent \u00eatre converties en jupyter notebook.\n```\npython scripts/bin/convert_beamer_to_ipynb.py -f Seance1/SEANCE_1.tex --title \"S\u00e9ance 1 : types et variables\"\n```\nCette commande produit le fichier Markdown `Seance1/SEANCE_1.md`. Il y a probablement des erreurs de conversion \u00e0 reprendre, mais en g\u00e9n\u00e9ral il vaut mieux simplifier la structure de la slide du .tex et recommencer la conversion jusqu'\u00e0 obtenir un r\u00e9sultat convenable.\n\nPour information, ce script est utilis\u00e9 actuellement pour g\u00e9n\u00e9rer le site web du cours \u00e0 partir des fichiers latex.\n\n\n### Commencer une nouvelle ann\u00e9e \n\nPour commencer une nouvelle ann\u00e9e, il faut cr\u00e9er un nouveau groupe `20XX-20XX+1` sur gitlab https://gitlab.dsi.universite-paris-saclay.fr/MethNum.\nPuis cr\u00e9er les sous-groupes par fili\u00e8re `L1`, `L2` et `L3`. Ces d\u00e9p\u00f4ts doivent \u00eatre publics. Ensuite, rajouter les enseignants en tant que membres du groupe principal\n`20XX-20XX+1`, avec le statut de D\u00e9veloppeur. Dans les d\u00e9p\u00f4ts enseignants, rajouter le groupe `20XX-20XX+1` en tant que membre du d\u00e9p\u00f4t.\n\nPuis dans les scripts de l'UE (https://gitlab.dsi.universite-paris-saclay.fr/MethNum/scripts), \u00e9diter la fin du fichier\n`__init__.py` avec les nouvelles informations.\n\nOn peut toujours rajouter des enseignants en cours d'ann\u00e9e, en les invitant au groupe principal `20XX-20XX+1`. En revanche, ainsi ils n'auront pas acc\u00e8s aux d\u00e9p\u00f4ts \u00e9tudiants post\u00e9s avant leur inscription. Pour leur donner cet acc\u00e8s a posteriori, recopier ce script, l'adapter et le lancer de n'importe quelle plateforme avec `methnum`:\n```\nfrom methnum_lib import course\n\ngroup = \"LDD-STAPS\"  # le nom du groupe\nassignments = [\"L2/Seance3\", \"L2/Seance4\", \"L2/DM1\"]  # les seances anterieures a l'inscription\nfor assignment in assignments:\n    course.ensure_instructor_access(assignment, student_group=group)\n```\n\n\n## FAQ\n\n- Dans une salle de cours, en lan\u00e7ant `methnum jupyter notebook` Firefox renvoie une page d'erreur disant ne pas pouvoir se connecter. Que fais-je?\n\n*Il faut aller dans les Pr\u00e9f\u00e9rences de Firefox, menu G\u00e9n\u00e9ral et tout en bas Param\u00e8tres R\u00e9seau. Cliquer sur Param\u00e8tres et D\u00e9tection automatique du proxy. Relancer la commande.*\n\n- La commande `methnum jupyter notebook` renvoie \n\n        [NotebookApp] The version of the Assignment List nbextension does not match the server extension; the nbextension version is 0.5.5 while the server version is 0.6.0.dev. This can happen if you have recently upgraded nbgrader, and may cause this extension to not work correctly. To fix the problem, please see the nbgrader installation instructions: http://nbgrader.readthedocs.io/en/stable/user_guide/installation.html\n        \n    Que faire ?\n    \n*Lancer `methnum update`.*   \n\n- En lan\u00e7ant l'autograde, le terminal m'informe que la correction a \u00e9chou\u00e9 pour certaines copies. Comment investiger ?\n\n*Ouvrir l'interface de correction avec `methnum jupyter notebook`, onglet Formgrader puis cliquer sur le nombre de soumissions du devoir.\nLes copies en question indiquent \"needs autograding\". Pour chacune d'entre elles, cliquer sur le petit \u00e9clair bleu (qui lance l'autograde) \u00e0 droite et \u00e9tudier les messages d'erreur. R\u00e9parer la copie en la retrouvant dans le dossier `submitted` et rappuyer sur l'\u00e9clair jusqu'\u00e0 ce que le probl\u00e8me soit corrig\u00e9.*\n\n- L'autograde me renvoie un message du type suivant. Que faire ?\n\n        [WARNING] Attribute 'cell_type' for cell cell-7bcf63f282d8b3be has changed! (should be: code, got: markdown)\n        [ERROR] There was an error processing assignment: /Users/.../submitted/groupe.prenom.nom/Seance1\n        [ERROR] Traceback (most recent call last):\n            [...]\n            nbformat.validator.NotebookValidationError: 'id' is a required property\n            \n            Failed validating 'required' in notebook:\n            \n            On instance:\n            {'cell_type': 'code',\n             'execution_count': None,\n             'metadata': {'deletable': False,\n                          'nbgrader': {'cell_type': 'code',\n                                       'checksum': 'b8b252f10b3ed0ab912009c790261954',\n                                       'grade': True,\n                                       'grade_id': 'cell-7bcf63f282d8b3be',\n                                       'locked': False,\n                                       'points': 1,\n                                       'schema_version': 3,\n                                       'solution': True}},\n             'outputs': ['...0 outputs...'],\n             'source': 'a=90\\nimport math\\nb=(math.pi/180)\\nprint(a*b)\\n'}\n\n*La premi\u00e8re ligne du message signifie qu'une cellule not\u00e9e en tant que code a \u00e9t\u00e9 chang\u00e9e par l'\u00e9tudiant en markdown. La derni\u00e8re ligne du message donne id\u00e9e du contenu de la cellule fautive, et le grade_id son num\u00e9ro.\n  Ouvrir le notebook probl\u00e9matique, avec l'affichage de l'interface nbgrader : Affichage -> Barre d'outil de cellule -> Create Assignment. Chercher la cellule incrimin\u00e9e portant le grade_id du messsage d'erreur et le contenu indiqu\u00e9. Changer son type en code (menu d\u00e9roulant Markdown), sauvegarder la copie et relancer l'autograde.*\n\n- L'autograde me renvoie un message du type suivant. Que faire ?\n\n        [AutogradeApp | INFO] Converting notebook /builds/prenom.nom/MethNum-L1-Seance1/submitted/prenom.nom/Seance1/TD1.ipynb\n        [AutogradeApp | WARNING] Cell with id 'cell-0dfd76d62c0f40f2' exists multiple times!\n        [AutogradeApp | WARNING] Attribute 'checksum' for cell cell-9cfba94efb70a639 has changed! (should be: 18570bd54e48c8ab4f372594127fdfb7, got: 3b743df83e44762f3895e6aa7e195b8f)\n        [AutogradeApp | WARNING] Attribute 'checksum' for cell cell-0e1be44ae6598166 has changed! (should be: 189286c222d66b26a16d86d8d147df84, got: 524b43ad1a6532257309e7824ad3120a)\n        ...\n        [AutogradeApp | WARNING] Attribute 'checksum' for cell cell-580cf6b6893a7258 has changed! (should be: e4b39430d4055c5379a33aef4e55f1da, got: bf22dd41ab8bb922288c3ca510552f3d)\n        [AutogradeApp | WARNING] Removing failed assignment: /builds/alex.pierron/MethNum-L3-Seance4/autograded/alex.pierron/Seance4\n        [AutogradeApp | ERROR] One or more notebooks in the assignment use an old version \n            of the nbgrader metadata format. Please **back up your class files \n            directory** and then update the metadata using:\n      \n            nbgrader update .\n      \n*H\u00e9las la derni\u00e8re ligne ne donne pas la bonne mani\u00e8re de corriger ce soucis. En revanche, la seconde avec `cell exists multiple times` est le vrai probl\u00e8me.\nOuvrir le notebook probl\u00e9matique, avec l'affichage de l'interface nbgrader : Affichage -> Barre d'outil de cellule -> Create Assignment. Chercher la cellule incrimin\u00e9e portant le grade_id du messsage d'erreur et le contenu indiqu\u00e9. Une fois la cellule en double rep\u00e9r\u00e9e, ouvrir le notebook version MarkDown avec un \u00e9diteur de texte de votre choix et supprimer la cellule en double. Relancer l'autograde.*\n\n\n\n## License\n\nLe contenu de ce projet est soumis \u00e0 la licence [BSD 3-clause \"New\"](LICENSE).\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Software to use MethNum course material, based on travo.",
    "version": "3.0.dev1",
    "project_urls": {
        "homepage": "https://gitlab.dsi.universite-paris-saclay.fr/MethNum",
        "repository": "https://gitlab.dsi.universite-paris-saclay.fr/MethNum"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "053152dc8900d726760e8801e0c5113033b265c296aeff1fecb90208f0b5c1fe",
                "md5": "46732573423215a0adcdd7af12d964f6",
                "sha256": "a7441850de4a9bda4d8eb8246f1a004785efa607603737f578eacadc50b1a111"
            },
            "downloads": -1,
            "filename": "methnum-3.0.dev1.tar.gz",
            "has_sig": false,
            "md5_digest": "46732573423215a0adcdd7af12d964f6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 27724,
            "upload_time": "2024-10-20T18:49:05",
            "upload_time_iso_8601": "2024-10-20T18:49:05.125486Z",
            "url": "https://files.pythonhosted.org/packages/05/31/52dc8900d726760e8801e0c5113033b265c296aeff1fecb90208f0b5c1fe/methnum-3.0.dev1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-20 18:49:05",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "methnum"
}
        
Elapsed time: 0.46166s