[Bêta] PythonExtra.
Posté le 29/10/2022 09:49
PythonExtra est un add-in Python alternatif pour (à ce stade) Graph 35+E II, Prizm et Graph 90+E. L'objectif est de fournir plus de fonctionnalités : modules standard,
getkey(), fonctions de dessin plus performantes, etc.
Version Bêta 0.2
Graph 35+E II / Prizm / Graph 90+E : PythonExtra-pe-0.2.0-beta.zip
Aperçu de PythonExtra sur Graph 90+E. (Cliquez pour agrandir)
Description sommaire des fonctionnalités :
- Compile pour Graph 90+E (fx-CG 10/20/50) et Graph 35+E II (fx-9860G III)
- Peu de RAM sur Graph 35+E II (c'est difficile d'en trouver sur ce modèle)
- Un shell pas trop mal (saisie rapide, scrolling) avec de bonnes performances
- Plein de modules standard
- array, builtins, cmath, collections, io, math, random, struct, sys, time
- Le module spécifique CASIO : casioplot (fidèle à part sur les polices)
- Un nouveau module gint avec les fonctionnalités avancées de gint :
- Pour l'instant, une bonne partie de <gint/display.h> et <gint/keyboard.h>
- Donc getkey() (attente de touche) ainsi que keydown() (test instantané) !
- Et des fonctions de dessin rapides comme dline() ou drect()
Le plan actuel :
- Être sensiblement compatible avec l'appli Python officielle.
- Pousser les fonctionnalités ajoutées pour vraiment relever le niveau de Python !
- Si du temps de développement se débloque : support autres Graph mono (pas de promesses).
Updates et screenshots à venir. Je n'ai pas l'intention d'implémenter un million de fonctionnalités, juste ce qu'il faut pour s'assurer que ça ne finisse pas mal documenté et non maintenu comme CasioPython.
Dépôt Git :
https://gitea.planet-casio.com/Lephenixnoir/PythonExtra
PythonExtra est notamment possible grâce à l'aide précieuse de
Mb88.
Comparaison directe
Dans l'exemple ci-dessous (
réalisé par Mb88), un Flappy Bird déjà bien optimisé (dessin partiel etc, à gauche) est accéléré un bon gros coup en utilisant PythonExtra et le module
gint pour le dessin (à droite).
Contexte historique
Aux
journées APMEP 2022, redgl0w racontait comment le port MicroPython pour Numworks n'était finalement pas super difficile. Moi je parlais de comment un port maison résoudrait le problème de
getkey(), et Critor m'a convaincu d'essayer sur-le-champ.
En fin de compte, j'ai clôné MicroPython Dimanche à midi et à 1 heure du matin j'avais un port fonctionnel avec
getkey() sur ma Graph 90+E (que j'ai d'ailleurs montré à CASIO Lundi, pour la démo). Comme quoi, des fois ça marche tout seul !
(Enfin, le début marche tout seul. Faire une bonne UI et gérer tous les détails ensuite c'est une autre paire de manches !)
Fichier joint
Citer : Posté le 05/01/2024 13:24 | #
@Lephe, je confirme qu'en supprimant le dossier build et en recompilant cette fois ça passe.
Je vais passer aux tests pour voir si il y a des changements effectifs.
En fait j'ai pas dû virer le dossier correctement la première fois comme je le pensais.
Merci beaucoup.
Citer : Posté le 05/01/2024 13:48 | #
Donc après quelques tests (sur cg50) :
- turtle.py et matplotl.py versions officielles sans rien changer fonctionnent désormais sans problème. L'ajout de la fonction round() a bien résolu le problème. Donc tamponné OK
- l'import relatif fonctionne, j'ai pu mettre turtle.py et matplotl.py dans un sous dossier et ainsi que les fichiers de test. Les imports relatifs fonctionnent alors qu'avant il fallait tout avoir à la racine pour que cela fonctionne. Donc a priori OK sur la base de mes tests rapides.
- pour le problème de non fermeture de fichiers sur erreur, j'ai repris le MWE print("Hello) de Ptitjoz et ai refait la manip sans avoir de problème pour switch sur Python officiel et modifier/enregistrer le fichier. PythonExtra a ensuite pu rouvrir le fichier et l’exécuter parfaitement. Donc là encore a priori OK sur la base de mes tests rapides.
En parallèle j'ai mis dans la PR les fichiers de font de Casioplot, donc on pourra a priori avoir un équivalent Casioplot complet (au moins sur fxCG50). Lephe, si besoin, dis moi si je dois faire pareil pour les fontes fx9860G.
Le schmilblick a vachement bien avancé
Par contre, Lephé, peux tu préciser la syntaxe attendue pour le call de dcircle et dellipse car si je fais par exemple
dellipse( 50, 40, 60, 55, C_LIGHT, C_BLACK )
Je me prends une erreur : "TypeError: extra positionnal arguments given"
Et je comprends pas trop ce qu'il attend de moi pour le coup.
Citer : Posté le 05/01/2024 13:55 | #
Merci. Pour dcircle() et dellipse() j'ai profité des capacités de Python sur le nommage des arguments. Le prototype (indiqué dans modgint.c) est le suivant :
dellipse(x1, y1, x2, y2, *, fill=C_NONE, border=C_NONE)
Ce qui signifie que les deux derniers arguments doivent être nommés (à cause de l'étoile) et ils sont optionnels. Donc généralement tu vas écrire
dcircle(20, 20, 15, border=C_BLACK, fill=C_RED)
De cette façon on s'affranchit de l'ordre arbitraire des paramètres dans l'API C. Je reconnais qu'il faudrait documenter.
Citer : Posté le 05/01/2024 14:00 | #
Ah ok, merci, j'avais vu mais j'avais pas compris la convention d'écriture.
Juste, par défaut, il faudrait pas changer border=C_NONE par une vrai couleur ? par exemple C_BLACK ?
Mais là je chipote, on peut se permettre désormais vu comme tu as avancé
Citer : Posté le 05/01/2024 14:02 | #
Ah ! L'idée c'était que tu veux généralement soir un border soit un fill, rarement les deux. Mais j'ai pas réalisé que du coup si tu spécifies aucun paramètre optionnel ça n'affiche rien du tout x) Ça va pas, va falloir changer ça. Une suggestion sur une meilleure façon de passer les paramètres ?
Citer : Posté le 05/01/2024 14:05 | #
Je confirme déjà que ça marche en l'état avec la bonne convention d'appel
On peut penser à
En gros si fill est à True, on garde la couleur de border pour remplir le cercle ou l'ellipse.
Si on veut avoir le bord d'une autre couleur, on retrace par dessus avec la couleur voulue dans border et le fill=False.
Si ni border ni fill ne sont remplis, on fait juste le contour de ellipse en C_BLACK qui est la couleur par défaut, mais au moins on a un tracé.
Qu'en penses tu ?
Edit: j'ai reformaté car c'était illisible mon précédent message
Citer : Posté le 05/01/2024 15:24 | #
C'est cool tout ca ! est il deja au point? j'ai hate d'utiliser dcircle, cela pourrait améliorer mon flappy bird!
Merci pour le travail Slyvtt et Lephenixnoir!
Citer : Posté le 05/01/2024 15:35 | #
Salut Tuper4
pour le moment tout ce qui est discuté est dans la branche de développement de PythonExtra car il y a eu pas mal de trucs qui ont bougé avec une méga mise à jour de micropython. Lephe (à juste titre), préfère qu'on fasse une première passe de vérification avant de lâcher la bête dans la nature pour être sûr que rien n'a été cassé au vol.
A priori les premiers test sont très très encourageants, donc on peut très raisonnablement penser qu'une nouvelle version arrive d'ici peu. Et y'aura du très très lourd dedans. Cela dit, si tu veux essayer et nous faire des retours de tests, on pourrait te mettre (et aux autres aussi bien entendu) une version compilée à disposition je pense. Ce qui sera peut être un peu plus long sera la MaJ du depôt dans la branche main/master qui nécessitera un peu plus de tests pour être sûr de notre coup.
Pour dcircle, comme tu peux le voir, on discute encore pour savoir ce qui est le mieux en terme d'API d'appel de la fonction :D, mais globalement cela reste du détail donc c'est pas ça qui va créer un délai monstrueux.
Citer : Posté le 05/01/2024 15:42 | #
Ok j'ai tout compris. Moi, faire des tests ne me dérange pas, mais.... pas de C
J'espere que cette mise a jour arrivera bientot!
Citer : Posté le 06/01/2024 09:40 | #
Somehow I managed to mess up my giteapc packages, got weird errors like permission denied when installing fxlibc or gint@dev, so finally I had to create a new user and install everything from scratch
I built the dev branch, now when I'll have some time I can test it and report here.
Citer : Posté le 06/01/2024 10:53 | #
Ok, that's annoying but you shouldn't lose any data at least. Make sure to never use sudo/root with GiteaPC
Citer : Posté le 06/01/2024 11:29 | #
Lephe, je te propose qu'on intègre les polices de Casioplot (en résolvant éventuellement cette histoire de convention d'appel de dellipse/dcircle) et qu'on release un "package" G90+E et un "package" G35+EII contenant respectivement :
- le g3a de PythonExtra + librairies turtle.py + matplotl.py + exemples d'utilisation de chaque librairie
- le g1a de PythonExtra + librairie turtle.py + exemple d'utilisation de turtle
Cela permettrait d'avoir un peu plus de retours. Bien entendu en signalant que c'est du WIP et qu'il peut y avoir des bugs.
Citer : Posté le 06/01/2024 19:31 | #
Bonsoir
Excusez mon manque de présence sur ce projet (problèmes familiaux)
Je lis les posts un peu en diagonale et je constate qu'il avance bien et que vous faites un super travail !
je trouve ce projet excellent et je veux bien faire partie des testeurs des futures versions g1a et aider à une documentation wiki.
C'est sûr que les 2 ou 3 tailles de polices de casioplot seraient un plus.
Quant à turtle je n'en vois pas trop l'utilité mais ce n' est qu'un avis personnel.
J'ai cru voir que seraient rajoutés circle et elipse et c'est vraiment bien. Quant aux niveaux de gris sur la 35 ce serait super.
Bien à vous
Citer : Posté le 07/01/2024 15:42 | #
Je n'ai pas retrouvé la trace mais j'avais dans le dépôt un Flappy Bird étiqueté "System ERROR" qui plantait, uploadé par @Mibi88. Le mystère est résolu : ce n'était cette fois pas un bug de PythonExtra, mais la fonction principale du programme qui faisait ça :
try:
draw_jeu(); dupdate(); simulation()
game()
except KeyboardInterrupt:
try: action(); game()
except KeyboardInterrupt: game()
game()
Ça vient d'un Flappy Bird qu'on a écrit avec Critor mais je ne sais pas si c'est Critor qui a écrit ce code ou une modification tierce ensuite. En tous cas, le problème est que les appels récursifs à main() ne se terminent jamais donc ça finit par faire un dépassement de pile, qui est difficile à détecter.
Pour une solution vanilla pour gérer ces exceptions "proprement", je suggère de regarder Chute tridimensionnelle. Sinon, avec PythonExtra on peut utiliser le clavier directement.
Citer : Posté le 07/01/2024 15:49 | #
Quant à turtle je n'en vois pas trop l'utilité mais ce n' est qu'un avis personnel.
J'ai cru voir que seraient rajoutés circle et elipse et c'est vraiment bien. Quant aux niveaux de gris sur la 35 ce serait super.
Citer : Posté le 07/01/2024 15:57 | #
Une update arrive sous peu suivant le conseil de Sly.
- Polices casioplot sur Graph 90+E : fait.
- dellipse/dcircle : je me suis rendu compte que c'était pas cohérent avec drect donc je suis revenu au prototype gint pur.
- J'ai corrigé un bug de gint qui causait un problème de répétition de touches. Essentiellement si on pressait une touche directionnelle pendant ou juste avant un long calcul, les répétitions se produisaient jusqu'à la fin du calcul même si on relâchait la touche avant.
- J'ai commencé à compiler un vrai ensemble d'exemples au lieu d'avoir juste des scripts en vrac.
Citer : Posté le 07/01/2024 16:42 | #
Ok voici l'update (0.2.0-beta) : https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/releases/tag/pe-0.2.0-beta
Lien de téléchargement : https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/releases/download/pe-0.2.0-beta/PythonExtra-pe-0.2.0-beta.zip
Voici une liste des changements depuis la dernière version (antique d'il y a deux ans).
Citer : Posté le 07/01/2024 16:50 | #
Et avant de pousser ça un peu plus loin dans ma TODO list, j'en profite pour re-résumer les points restants actifs : c'est une mise à jour de la liste de ce message.
- Bug sur l'émulateur (Ptitjoz #194519)
- Fonction de dessin d'image (Ena0 #194556, Tuper4 #194749)
- Moteur de gris (Ptitjoz #194757)
- J'ai observé un crash sur 35+E II en sortant de l'appli après avoir joué avec les exemples
- Bug avec les dossiers nommés par des chiffres (Ptitjoz #194904)
- Support des polices (Ptitjoz #194937)
- Documentation propre des modules/fonctions disponibles
- Support de l'extinction dans l'add-in dans gint (Ptitjoz #195137)
- Benchmarks sérieux pour les perfs (Ptitjoz #195137)
- Traduction en anglais (antimatter629 Cemetech)
Edit : et avant que j'oublie il y a bien sûr des choses dans la PR ouverte par SlyVTT.
Citer : Posté le 07/01/2024 16:56 | #
Bravo Lephé, ça c'est de la MaJ de furieux !!!
C'est vraiment une grosse grosse update avec plein d'ajouts.
Il y a vraiment de quoi se faire plaisir désormais et tu as mis 10 ans au Python officiel là
Nice !!!
Citer : Posté le 07/01/2024 19:19 | #
Bonsoir
je viens de mettre cette version sur ma graph 35+EII et c'est remarquable sur les exemples proposés.
Merci Lephe et Slyvtt et ceux qu'y participent à ce projet ! Casio va être fier (ou jaloux ?) de vous
Mon taquin fonctionne toujours, mais c'est anecdotique (d'ailleurs, il faut que je le finalise)
j'essaierai de faire des retours dès que possible et essayer de chasser des bugs (espérant ne jamais en trouver...)
Pour info, sur l'émulateur via Linux, je n'arrive pas sans les renommer à importer les exemples (mais ça n'a rien à voir avec gint)
Bien à tous
Citer : Posté le 07/01/2024 20:05 | #
Tiens Ptitjoz tu tombes bien.
Tu pourrais nous donner plus d'info sur le bug du ralentissement dont tu parles ici Ralentissement PythonExtra dans Emulateur car je n'arrive pas à reproduire.
Idéalement, essaye avec la dernière version de PythonExtra car il y a eu pas mal de modifs, ainsi que de gint justement sur la gestion du clavier.
Si tu as encore le bug, alors STP précise nous : le script qui plante (idéalement envoie nous le fichier .py), la version de l'émulateur et un max d'infos pour comprendre le bug.
Merci beaucoup.