[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 23/12/2023 12:09 | # | Fichier joint
Merci pour le test Ptitjoz, juste une erreur bête de ma part (quand le dernier fichier importé est folder/tbug.py il cherche tlib dans le dossier folder/, mais quand le dernier fichier importé était tbug.py ne voyant pas de slash il cherchait tlib dans le "dossier" tbug.py/). x)
J'ai corrigé, vois ci-joint. J'ai aussi renommé le g1a en PythonEx.g1a pour t'éviter le problème avec l'émulateur.
Citer : Posté le 23/12/2023 12:36 | #
bonjour
à la racine ce que tu as corrigé fonctionne merci
ensuite
j'ai créé une arborescence /A/B/C
dans C j'ai mis imp1.py imp2.py et test.py
à l'exécution de test.py
voici le message de retour :
https://joz.alwaysdata.net/info/
Citer : Posté le 24/12/2023 15:45 | #
C'est bon, j'ai essayé (comme ce que j'ai promis la semaine derniere ) et ca marche! J'ai fais un simple projet avec Turtle et il faut mettre les projets que tu "import" dans le meme dossier du projet initial qui n'est pas grave . pour la bibliotheque turtle, je l'ai telecharge sur ce lien. voici le code :
##############################################################################################
import turtle
turtle.clear() #pour effacé ce qu'il y a dans le shell, sinon tu verra la "tortue" avancé alors qu'il y a les écriture du shell
turtle.down() #mets la "tortue" en position d'écriture
turtle.forward(10) #cela fais avancé la "tortue"
##############################################################################################
(je n'ai pas utilisé la balise code car j'ai utilisé la couleur vert pour les commentaires du code)
Et le programme marche comme prévu! Bravo a toi pour le travail !!
Citer : Posté le 24/12/2023 15:55 | #
Ah, il y a un probleme maintenant, il ne reconnaît plus les bibliothèques random et time( pour gint, il n'y a pas de problème).
Citer : Posté le 24/12/2023 16:11 | #
C'est bon j'ai compris: les bibliothèques inclus avec PythonExtra sont "utime" et "urandom". Alors il suffisait de remplacer "time" par "utime" et "random" par "urandom". Désolé
Citer : Posté le 26/12/2023 22:25 | # | Fichier joint
Voilà Ptitjoz cette fois j'ai testé racine, dossier, sous-dossier, et les imports vers le bas (import folder.sub.a) ça devrait aller mieux.
C'est bon, j'ai essayé (comme ce que j'ai promis la semaine derniere ) et ca marche!
Super ! Content de savoir que ça passe tout de suite.
C'est bon j'ai compris: les bibliothèques inclus avec PythonExtra sont "utime" et "urandom". Alors il suffisait de remplacer "time" par "utime" et "random" par "urandom". Désolé
J'ai activé l'option pour que ces modules soient disponibles sous les noms time et random comme d'habitude. Je viens de vérifier de mon côté, ça marche. Peux-tu me préciser dans quel contexte ça échoue pour toi ? N'hésite pas à récupérer la dernière version en PJ de ce message.
Citer : Posté le 26/12/2023 22:56 | #
bonjour
sur graph35 j'ai le module daté au 23/12 et toujours le meme probleme
soit je me suis planté.. soit c'est pas la bonne version ?
https://joz.alwaysdata.net/info/
Citer : Posté le 27/12/2023 09:01 | #
Gaah j'ai pas recompilé. Décidément ! J'ai pas ma 35+E II sous la main donc je teste sur la 90+E. J'ai mis à jour l'archive d'hier.
Citer : Posté le 27/12/2023 09:13 | #
Merci Lephe pour ton travail, toutefois je viens de tester sous Linux cette fois.
Il s'avère que pour PythonEx.g1a ça soit les mêmes fichiers dans l'archive
Comme je n'ai pas de retour je pense que ces 2 binaires sont identiques
Les fichiers binaires PythonExtra-relimport2-194837/PythonExtra.g3a et PythonExtra-relimport3-194884/PythonExtra.g3a sont différents
Par contre, je n'ai pas essayé si ça fonctionnait bien sur l'émulateur (n'ayant pas de casio G90)
Bien à toi
https://joz.alwaysdata.net/info/
Citer : Posté le 27/12/2023 09:16 | #
Mais ! Mais ! Quelque chose n'a pas marché dans le remplacement de la PJ (je vois plus de PJ carrément). J'ai réuploadé et cette fois j'ai fait le diff à la main. Ils sont différents. Je vais y arriver oui x) Désolé.
Citer : Posté le 27/12/2023 09:33 | #
nos messages se sont télescopés !
Maintenant les fichiers sont différents ! J'ai mis sur la g35 et ça fonctionne et je te refais un retour complet quand j'aurais un peu plus de temps
en tous cas merci beaucoup ! c'est sympa
https://joz.alwaysdata.net/info/
Citer : Posté le 27/12/2023 18:16 | #
Quelques retours mitigés
Des boites d'alerte et quelques crashs (je n'ai pas noté) et obligé de faire EXE et EXIT pour relancer.
Les tests avec répertoire et sous-répertoires fonctionnent
Si erreur de syntaxe, impossible d'enregistrer / de détruire (mais c'était déjà le cas avant).
À un moment la machine a planté et depuis impossible de lancer PythonExtra (ça freeze) si je fais reset ou en ôtant les piles la machine se débloque, mais si je retourne dans Pythonextra, idem la machine se bloque à nouveau
Il me reste l'option de tout réinitialiser et essayer de voir ce qui bloque
https://joz.alwaysdata.net/info/
Citer : Posté le 27/12/2023 20:36 | #
de mon coté, ca marche nikel
Si erreur de syntaxe, impossible d'enregistrer / de détruire (mais c'était déjà le cas avant).
Quand cela se passe, juste reset la calc et ca marche
Citer : Posté le 27/12/2023 21:19 | #
de mon coté, ca marche nikel
Tsuper pour toiSi erreur de syntaxe, impossible d'enregistrer / de détruire (mais c'était déjà le cas avant).
Quand cela se passe, juste reset la calc et ca marche
d'accord avec toi, mais ça ne devrait pas être le cas.
j'ai remis à blanc la machine et je refais des tests, (pour l'instant, je n'ai plus de boite de dialogue d'erreur ni de freeze ) le g1a pouvait-il être corrompu pendant le transfert ?
Concernant de nouveaux tests, quelques petites remarques :
Je me suis aperçu que j'avais créé également des répertoires du style 070 /071/072 et là PythonExtra n'aime pas contrairement à Python natif de la machine. Apparemment, il faut faire commencer les noms des répertoires par une lettre. (ce qui ne me semble pas illogique, mais pour une compatibilité avec Python de la machine ?)
Je ne sais pas si c'est possible de faire appel à un import d'un niveau supérieur ou de la racine.
Les modules natifs turtle, matplotlib et random ne fonctionnent pas, math et casioplot fonctionnent.
casioplot et gint fonctionnent par ailleurs ensemble (même si n'est peut-être pas une bonne idée...).
https://joz.alwaysdata.net/info/
Citer : Posté le 27/12/2023 22:06 | #
pour turtle et matplotlib utilise ce lien et pour random, il était censé fonctionner si non utilise "urandom"
Citer : Posté le 29/12/2023 14:02 | #
Petite question
Vous pouvez m'expliquer les paramètres halign et valign ? (et comment les coder)
size c'est le nombre de caractères, je suppose ?
Merci
https://joz.alwaysdata.net/info/
Citer : Posté le 29/12/2023 14:31 | #
Tu peux aller regarder dans gint/display.h, la fonction est exactement la même
PS : là https://gitea.planet-casio.com/Lephenixnoir/gint/src/branch/master/include/gint/display.h
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 29/12/2023 14:45 | #
ah oui merci.
et pour changer la taille (police/font) est-ce possible ?
https://joz.alwaysdata.net/info/
Citer : Posté le 01/01/2024 23:17 | #
Merci pour les tests !
Quelques retours mitigés
Ah zut ! Décidément PythonExtra n'est pas au niveau de qualité que je voudrais. Je suppose que comme je n'utilise pas activement l'add-in c'est inévitable que je passe à côté de ces bugs. Je vais essayer de les corriger. Note que le plus important de loin c'est de pouvoir reproduire les crashs. Donc quand ça arrive n'hésite pas à garder au chaud une copie du script qui cause le bug.
En plus je teste principalement sur la Graph 90+E et la Graph 35+E II a des limitations en plus donc ça ne doit pas aider. Je vais passer à la Graph 35+E II à la place, avec un peu de chance je vais croiser ces bugs moi-même naturellement.
Bon c'est déjà ça !
Enregistrer/détruire ça veut dire quoi ? Il n'y a pas de fonction d'enregistrement de fichiers dans PythonExtra.
Eeh ?! Ça sent les problèmes avec le système de fichiers, pfff... non que le code de PythonExtra ne soit pas en faute mais je voudrais pas dire y'a que sur la calto que les fichiers ont autant de complications et problèmes dans tous les sens.
Peu probable, normalement...
Ça ne devrait pas être le cas, je vais tester.
Avec des .py flottants non, mais je crois avoir vu passer que si tu crées un vrai module (avec un __init__.py) tu peux importer de façon relative dans le module avec les notations comme import ..fichier.
random devrait, turtle et matplotlib ne sont pas (encore) intégrés comme Tuper l'a relevé. On peut envisager de les ajouter.
C'est pas idéal, et pas très utile parce que gint fait un peu tout ce que casioplot propose, mais y'a pas de danger particulier à mélanger.
Pas encore mais je voudrais l'ajouter bientôt (en gros dès que j'aurai fait une passe sur les sales bugs). L'idée serait que tu prends une image de police genre ceci, tu la passes à un script que je vais fournir, et ça te donnera un tableau de données que tu pourras utiliser dans gint avec une fonction qui s'appelle dfont() et qui permet de changer la police. Je peux aussi intégrer quelques polices par défaut.
Citer : Posté le 02/01/2024 08:53 | #
Bonjour et bonne année Lephe.
Merci pour ce retour complet suite à mes remarques et interrogations.
Oui bien entendu, dans la mesure du possible, je te ferais un retour sur les crashs et en te fournissant le maximum d'indications.
Si erreur de syntaxe, impossible d'enregistrer / de détruire (mais c'était déjà le cas avant).
Enregistrer/détruire ça veut dire quoi ? Il n'y a pas de fonction d'enregistrement de fichiers dans PythonExtra.
Pour expliquer le problème, quand je code un script (avec Pyhon natif - Python Casio - ), et que je fais une erreur de syntaxe et j'exécute ce script avec PE, ça me dit erreur de syntaxe (normal !) et quand je veux modifier ce même script avec Python natif, je constate que je ne peux pas enregistrer les modifications (sauf à enregistrer sous un nouveau nom). De plus je ne peux plus détruire le script incriminé ni par Pyton Casio ni par le menu MÉM. Il faut que je Reset la machine et là seulement je peux modifier/supprimer le script.
Concernant l'utilisation d'importer casioplot c'était juste pour avoir la possibilité d'écrire plus petit avec draw_string() qui supporte 2 tailles de police sur la mono et 3 sur la couleur. Mais si tu intègres dfont() ça ne sera plus utile merci d'avance
Quant à turtle, random et autres, perso, je n'en ai pas besoin avec PE, c'était juste pour le signaler, car il m'avait semblé qu'avant ça fonctionnait.
Pour les imports relatifs, il faudrait que je creuse un peu puisque je ne maitrise pas certaines choses... (un peu comme les class)
Bien à toi et merci de ton investissement
https://joz.alwaysdata.net/info/
Citer : Posté le 02/01/2024 14:27 | #
Pour expliquer le problème, quand je code un script (avec Pyhon natif - Python Casio - ), et que je fais une erreur de syntaxe et j'exécute ce script avec PE, ça me dit erreur de syntaxe (normal !) et quand je veux modifier ce même script avec Python natif, je constate que je ne peux pas enregistrer les modifications (sauf à enregistrer sous un nouveau nom). De plus je ne peux plus détruire le script incriminé ni par Pyton Casio ni par le menu MÉM. Il faut que je Reset la machine et là seulement je peux modifier/supprimer le script.
il faudrait que je creuse un peu puisque je ne maitrise pas certaines choses... (un peu comme les class)
Bien à toi et merci de ton investissement