initial commit

This commit is contained in:
Djalim Simaila 2024-03-25 12:02:27 +01:00
commit db4f9505da
6 changed files with 1641 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
mocodo_notebook
**__pycache__**
output

12
README.md Normal file
View File

@ -0,0 +1,12 @@
## TLDR
Le module python mocodo est un wrapper pour le programe mocodo, il peut etre utilusé pour faciliter des scipts
on utilise donc le module
```python
from mocodo.api import mocodo
```
ou etre utilisé dans un notebook, dans ce cas on utilse
``` python
from mocodo.magic import mocodo
```
L'avantage de ce dernier est qu'il affiche les resultats dans le notebook (en plus de gerener les fichiers).

128
mcd_mocodo.py Normal file
View File

@ -0,0 +1,128 @@
"""
Domaines de l'application exprimés en MCD mocodo
"""
apprenant = "apprenant:id_apprenant,nom,prenom,date_de_naissance,classe,reponses_questionnaire\n"
compte = "compte:login,email,password,état,date_de_derniere_co,nom,prenom,mobile,date_de_création,moyen_paiement,est_connecté\n"
auth = f"""
{compte}
{apprenant}
licence:clé,date_utilisation
promotion:code, date_de_création,durée_reduction,reduction,conditions
abonnement:nom_abonnement,prix,date_de_début,date_de_fin
droit:id_droit,niveau_d_access,nb_profil_crée,nb_user_invite,peut_modifier_profil,peut_supprimer_profil, peut_faire_activité, peut_faire_test, peut_consulter_hist_activité, peut_consulter_hist_test
questionnaire: id_questionnaire,forme_rappel, disponibilité,reponses_questionnaire
probleme_signalé:id_prob,version de l'application,support,date du signalement,commentaire
question_posée:id_quest,question
anonyme:id,email
inviter,0N compte,0N compte,0N apprenant,0N droit,0N licence: date invitation,
utiliser,01 compte,0N licence
repondre, 01 compte, 0N questionnaire
créer, 0N compte,0N apprenant
acheter, 0N compte, 0N promotion, 0N licence, 0N abonnement : date d'achat
assigner, 11 abonnement, 0N droit
poser, 11 question_posée, 0N anonyme
poser1, 11 question_posée, 0N compte
signaler, 11 probleme_signalé, 0N anonyme
signaler1, 11 probleme_signalé, 0N compte
"""
fiche_activite = "fiche_activité:id_fiche,comp_travaillé,pourquoi_travailler_comp,variantes\n"
activite = "activité: id_activité, caracteristiques ia\n"
activites = f"""
{apprenant}
{compte}
{activite}
{fiche_activite}
activité_ajoutee: titre, caracteristiques ia
historique_activité: id, durée, date de réalisation, note difficulté,note plaisir,note concentration, note durée, activité proposée par algo
réaliser, 0N compte, 0N activité, 11 historique_activite, 0N apprenant : points accordés
ajouter, 0N compte,0N activité_ajoutee, 11 historique_activité , 0N apprenant
posséser, 11 historique_activité, 0N apprenant
decrire, 0N fiche_activite, 11 activité
"""
recompenses = f"""
{apprenant}
{compte}
palier:id_palier,nombre de points
defi:id_defi,nom,objectif,date limite
badge: id_badge,nom,description,image
{activite}
atteindre, 0N apprenant, 0N palier
réaliser, 0N compte, 0N activité, 0N apprenant : points accordés
réaliser3, 0N apprenant, 0N defi
debloquer, 0N defi, 11 badge
debloquer1, 0N palier, 11 badge
"""
#la relation réaliser est dupliquée entre des deux domaines, je garde un version sans pour la concatenation finale
recompenses_nr = f"""
{apprenant}
{compte}
palier:id_palier,nombre de points
defi:id_defi,nom,objectif,date limite
badge: id_badge,nom,description,image
{activite}
atteindre, 0N apprenant, 0N palier
réaliser3, 0N apprenant, 0N defi
debloquer, 0N defi, 11 badge
debloquer1, 0N palier, 11 badge
"""
ressources = f"""
mot_clé: mot
Ressource:id_ress,titre,description,date_de_publication,type,niveau_d_access
vidéo:id_video,lien_vers_site_externe
article:id_article,lien_vers_site_externe
{fiche_activite}
contenir,0N mot_clé,0N Ressource
etre1, 0N Ressource, 11 vidéo
etre2, 0N Ressource, 11 article
etre3, 0N Ressource, 11 fiche_activité
"""
test =f"""
test_de_positionnement: id_testpos, consigne, caracteristiques ia
test_de_progression: id_testpro, consigne
historique_test: id_entree, durée, score, temps de réaction moyen, date de réalisation
{apprenant}
{compte}
réaliser1, 0N compte,0N test_de_progression, 11 historique_test, 0N apprenant
réaliser2, 0N compte,0N test_de_positionnement, 11 historique test, 0N apprenant
posséser1, 11 historique_test, 0N apprenant
"""
entités = [
apprenant,
compte,
fiche_activite,
activite,
]
domaines = [
auth,
activites,
recompenses_nr,
ressources,
test,
]
texte_complet = ""
for domaine in domaines:
for entite in entités:
if entite in domaine:
domaine = domaine.replace(entite, "")
texte_complet += domaine
for entite in entités:
texte_complet += entite

1409
mocodo_notebook.ipynb Normal file

File diff suppressed because it is too large Load Diff

46
mocodo_script.py Normal file
View File

@ -0,0 +1,46 @@
import mcd_mocodo as mcd
from mocodo.api import mocodo
import pathlib
import os
DOSSIER_DE_SORTIE = "output"
SUPPRIMER_FICHERTEXTE = True
SUPPRIMER_GEOJSON = True
domaines = [
# (mcd.nom_du_domaine, "nom_du_fichier", seed),
(mcd.auth, "auth",4),
(mcd.activites, "activites",2),
(mcd.ressources, "ressources",2),
(mcd.test, "test",3),
(mcd.recompenses, "recompenses",3),
]
def generer_mcd(domaine:str,nom:str,ga:bool=False,seed:float=1):
"""
Generer un graphe MCD à partir d'un domaine exprimé en MCD mocodo
:param domaine: Le domaine exprimé en MCD mocodo
:type domaine: str
:param nom: Le nom du fichier de sortie
:type nom: str
:param ga: Utiliser l'algorithme génétique pour arranger les entités
:type ga: bool
:param seed: La graine pour le réarangement des entités, par défaut 1
:param seed: int
:return: None
"""
with open(f"{nom}.mcd", "w") as f:
f.write(domaine)
result = mocodo(f'-i {nom} --colors ocean -t arrange{":algo=ga" if ga else ""} --seed {seed} --detect_overlaps')
print(result)
if SUPPRIMER_FICHERTEXTE : pathlib.Path(f"{nom}.mcd").unlink(missing_ok=True)
if SUPPRIMER_GEOJSON : pathlib.Path(f"{nom}_geo.json").unlink(missing_ok=True)
if __name__ == "__main__":
pathlib.Path(DOSSIER_DE_SORTIE).mkdir(parents=True, exist_ok=True)
os.chdir(DOSSIER_DE_SORTIE)
for mcd_mocodo, nom, seed in domaines:
generer_mcd(mcd_mocodo, nom, seed=seed)

43
requierements.txt Normal file
View File

@ -0,0 +1,43 @@
asttokens==2.4.1
cairocffi==1.6.1
CairoSVG==2.7.1
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
comm==0.2.2
cssselect2==0.7.0
debugpy==1.8.1
decorator==5.1.1
defusedxml==0.7.1
executing==2.0.1
idna==3.6
ipykernel==6.29.3
ipython==8.22.2
jedi==0.19.1
jupyter_client==8.6.1
jupyter_core==5.7.2
matplotlib-inline==0.1.6
mocodo==4.2.4
nest-asyncio==1.6.0
packaging==24.0
parso==0.8.3
pexpect==4.9.0
pillow==10.2.0
platformdirs==4.2.0
prompt-toolkit==3.0.43
psutil==5.9.8
ptyprocess==0.7.0
pure-eval==0.2.2
pycparser==2.21
Pygments==2.17.2
python-dateutil==2.9.0.post0
pyzmq==25.1.2
requests==2.31.0
six==1.16.0
stack-data==0.6.3
tinycss2==1.2.1
tornado==6.4
traitlets==5.14.2
urllib3==2.2.1
wcwidth==0.2.13
webencodings==0.5.1