Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [Bêta] PythonExtra.
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

[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


Précédente 1, 2, 3, 4, 5, 6 ··· 10 ··· 18, 19, 20 Suivante
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 06/11/2022 21:19 | #


Lephenixnoir a écrit :

Parisse j'ai tenté de chercher ton implémentation mais il n'y a apparemment pas de code MicroPython dans ton giacbf.tgz. Tout ce que j'ai trouvé c'est un gros libmicropy.a et même celui-là ne contient que du code standard. Où est-ce que je suis supposé regarder ?

Dans giacbf il y a l'interface 90 mais pas micropython qui est dans l'archive https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/micropy.tgz. Le port est dans le repertoire fxcg, en particulier le fichier graphic.c contient l'essentiel des modules natifs scientifiques (sauf ulab), dont une partie (matplot, turtle, linalg, cas) ne sera pas utilisable tel quel car linkes a du code Xcas (via des callbacks C). turtle devrait etre assez facile a implementer en natif, matplotl moins facile, par contre linalg serait plus dur, et cas impossible (sauf si on sait faire un appel inter-addins!). Mon idee pour l'instant c'est de les laisser avec des callbacks bidons ou peut-etre de recompiler libmicropy.a sans support pour ces modules.
La version de micropython est 1.12, j'y ai fait quelques modifs pour par exemple savoir si un mot est reconnu comme une variable/fonction Python, ou pour avoir la liste des variables definies, ou pour avoir le numero de ligne d'erreur du parseur.
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 06/11/2022 21:21 | #


P.S.: Je mets la version actuelle de l'UI pour 35 ici https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/python35.tgz. Pour l'instant ca ne linke pas, il manque encore des callbacks.
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 07/11/2022 16:29 | #


J'ai mis une version tres preliminaire de l'addin MicroPython pour 35eii ici https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/micropy.g1a, les sources sont en 2 parties, l'UI https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/python35.tgz et pour l'interpreteur https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/micropy35.tgz
Il y a encore plein de truc a corriger/ameliorer dans les modules et l'interface, mon objectif est d'avoir une UI tres proche de celle de KhiCAS, qui permette d'ecrire de petits programmes relativement facilement sur la calculatrice elle-meme et d'utiliser le shell comme une calculatrice. Comme ca les gens peuvent passer de KhiCAS a MicroPython et inversement sans etre depayses, et peuvent aussi facilement changer vers d'autres calculatrices sur lesquels KhiCAS est porte (Graph 35<->90, Numworks, TI Nspire CX)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 07/11/2022 17:39 | #


J'ai testé la dernière version de PythonExtra et du micropython de Parisse, et même si celui de Parisse est plus complet, il y a plus de modules dans PythonExtra, donc je préfère. Par contre j'ai trouvé des bugs de \n et de input dans PythonExtra. En plus ce serait cool si le shell se met à jour pendant l'exécution.
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 07/11/2022 17:46 | #


Mb88 a écrit :
J'ai testé la dernière version de PythonExtra et du micropython de Parisse, et même si celui de Parisse est plus complet, il y a plus de modules dans PythonExtra, donc je préfère. .

Ca doit dependre du domaine, en fait mon objectif prioritaire est de fournir des modules pour faire des maths, et de pouvoir travailler directement sur la calculatrice: d'ou sur la 90 les modules cas, arit, linalg, numpy et les modules de ulab. Et puis a terme, j'espere qu'on pourra fusionner les efforts.
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 09/11/2022 18:03 | #


Nouvelle version de https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/micropy.g1a, je dirais qu'on est au stade alpha maintenant. J'ai finalement implemente un module natif pour la tortue qui est a l'etat de prototype (ca permet un chargement instantane et ca evite d'utiliser une partie du tas micropython). Le module d'arithmetique/crypto est fonctionnel (un peu moins complet qu'avec KhiCAS). Il reste encore matplotlib pour pouvoir se passer entierement du Python de Casio et il faudra que je vois si j'arrive a faire marcher un linalg sans Xcas. Mais on a dors et deja une solution mathematique bien plus complete (arithmetique, complexes) et plus de primitives graphiques dans graphic vs casioplot (cercles, polygones, formes remplies). Les menus rapides du shell (touches F1, F2, shift-F1 a shift-F6) et quelques raccourcis claviers sont configurables par l'utilisateur en modifiant le fichier FMENU.py.

Question: la touche shift-CATALOG n'est pas accessible avec GetKey et ouvre le catalogue de fonctions de l'OS de Casio qui ne sert a rien. Par contre dans l'appli Python elle ouvre un catalogue qui serait fort utile, sait-on y acceder?
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 09/11/2022 18:11 | #


D'ailleurs j'avais eu plusieurs system error avec la version d'avant.
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 09/11/2022 21:18 | #


Parisse a écrit :
Mb88 a écrit :
J'ai testé la dernière version de PythonExtra et du micropython de Parisse, et même si celui de Parisse est plus complet, il y a plus de modules dans PythonExtra, donc je préfère.

Ca doit dependre du domaine, en fait mon objectif prioritaire est de fournir des modules pour faire des maths, et de pouvoir travailler directement sur la calculatrice: d'ou sur la 90 les modules cas, arit, linalg, numpy et les modules de ulab. Et puis a terme, j'espere qu'on pourra fusionner les efforts.

Je n'y avais pas pensé, mais ce serait vraiment cool de fusionner une partie de nos efforts. Il y a pas mal de travail que tu fais qui mériterait d'être diffusé, mais qui est isolé par la structure assez monolithique de Xcas et les moyens de diffusion que tu as (pas de Git pour contribuer, spécifiquement). Améliorer ces facettes dans Xcas directement demanderait beaucoup d'efforts de ta part, mais on devrait pouvoir sauver l'affaire dans l'autre sens : puisqu'on a là un MicroPython basique mais "bien diffusé", on devrait pouvoir extraire et réinvestir les fonctionnalités que tu as écrites (par exemple lister les variables locales, c'est pratique ça...). Tant qu'il n'y a pas de problèmes de licence en tous cas.

---

Sinon dans les news, les jeux commencent à marcher. Il n'y a pas encore beaucoup de mémoire (du tout) mais c'est à peu près la seule fonctionnalité Python qui manque. On a déjà un module casioplot (que j'ai écrit dans le train sans le tester...) qui marche pas mal, et le temps que le module gint soit complété ce sera (je pense avec une certaine marge) la meilleure implémentation dispo pour écrire des jeux sur les modèles compatibles.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 09/11/2022 21:47 | #


J'ai pas encore eu le temps d'essayer, mais ça me tease un max cette implémentation de micropython. C'est qu'elle version qui sert de base au portage ?

Pour la memoire, la limite vient des arenes disponibles ? Potentiellement sur la G90 tu vas pouvoir largement booster non ?
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 09/11/2022 21:58 | #


Perso je préfère le portage de Lephe', mais j'ai pas testé la dernière version du portage de Parisse. Je suis en train de faire un jeu PythonExtra casioplot+gint et les perfs sont très bonnes !
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 09/11/2022 22:45 | #


J'ai aussi une implementation de casioplot, qui est en fait plus complete que casioplot, avec des fonctions de trace de ligne, rectangle, polygone, cercle et de remplissage. Je vais essayer de finaliser le turtle natif demain, ainsi que arit (rajouter un powmod qui marche sur des listes pour pouvoir faire facilement de la crypto RSA). matplotl sera fourni par le script de Casio, faire un module natif sans Xcas demanderait trop de travail. Restera a voir ce que je fais pour l'algebre lineaire (linalg+numpy), sachant qu'il y a deja ulab (mais ulab est assez limite).

L'UI commence a bien marcher pour programmer directement sur la calculatrice, mais il y a encore pas mal de travail si on veut documenter les fonctions les plus utilisees.
Pour l'instant ma cible est la 35eii (avec 96K de tas+70K de memoire disponible pour l'UI), mais ca ne devrait pas trop poser de problemes de porter sur la 90 car tout y est deja, mais pour le moment c'est interne a KhiCAS, ca permettrait de disposer de 3Mo de ram au lieu de 256K.
Il y a une version telechargeable de l'addin compile de PythonExtra quelque part?
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 10/11/2022 17:28 | # | Fichier joint


Je ne crois pas. Je t'ai joint une build du dernier commit au message.
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 10/11/2022 18:29 | #


Merci. A ce que je vois, l'UI est tres minimaliste, pour l'instant on peut executer un script de maniere conviviale, mais faire autre chose est fastidieux. La taille de fonte du shell est bien plus adaptee que celles de Casio que j'utilise, je ne sais pas si ce serait facile a porter sur libfx, ca vaudrait le coup.

De mon cote, j'ai bien avance dans le portage de linalg/numpy, on pourra donc travailler avec des matrices dans micropy, le shell Python peut servir de calculatrice scientifique tres complete.
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 10/11/2022 19:06 | #


Slyvtt a écrit :
J'ai pas encore eu le temps d'essayer, mais ça me tease un max cette implémentation de micropython. C'est qu'elle version qui sert de base au portage ?

C'est la dernière, clônée du dépôt officiel il y a 2 semaines.

Pour la memoire, la limite vient des arenes disponibles ? Potentiellement sur la G90 tu vas pouvoir largement booster non ?

Sur la Graph 90+E oui en faisant le trick à la Doom. Sur la Graph 35+E II comme sur la Graph 90+E l'appli Python officielle a plus de mémoire que ce que les add-ins ont normalement ; CASIO a dû pousser un peu. Du coup c'est difficile de faire compétition ; mais sur la Graph 90+E ça devrait aller.

Parisse a écrit :
Merci. A ce que je vois, l'UI est tres minimaliste, pour l'instant on peut executer un script de maniere conviviale, mais faire autre chose est fastidieux. La taille de fonte du shell est bien plus adaptee que celles de Casio que j'utilise, je ne sais pas si ce serait facile a porter sur libfx, ca vaudrait le coup.

T'es gentil haha, minimaliste c'est un euphémisme. En fait il y a déjà le code pour déplacer le curseur, utiliser l'historique, et scroller le shell (avec un historique de longueur configurable) mais c'est pas tout connecté. Sans aller jusqu'à un truc extravagant on est d'accord que ça manque de bases encore !

Edit : pour la police tant que tu as un système d'affichage de texte qui supporte la largeur variable des caractères ça devrait le faire.

De mon cote, j'ai bien avance dans le portage de linalg/numpy, on pourra donc travailler avec des matrices dans micropy, le shell Python peut servir de calculatrice scientifique tres complete.

Hmmt tu piques mon intérêt là. linalg je ne connais pas, mais numpy c'est assez évident. Ton port est-il assez indépendant de KhiCAS pour qu'on puisse espérer le séparer ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 10/11/2022 19:45 | #


linalg, ca n'existe pas en Python PC, c'est mon implementation d'un module natif MicroPython pour faire des operations de base sur des matrices codees par des listes de listes: transpose + - * reduction inverse det et aussi la recherche de valeurs/vecteurs propres numerique, il y a aussi un rooter polynomial et fft/ifft.
numpy c'est une petite classe ecrite en langage Python pour rendre certaines operations plus transparentes (par exemple pouvoir ecrire A*B pour faire le produit de 2 matrices). Elle utilise linalg pour les operations de base (par exemple on traduit A*B en mul(A.x,B.x))
Jusqu'a present linalg etait linke a Xcas pour faire les calculs un peu complexes, ce que j'ai fait aujourd'hui c'est extraire le code numerique de Xcas pour le rendre independant. Donc ce soir tu peux calculer l'inverse ou le determinant d'une matrice avec la version actuelle de micropy.g1a. Pour les valeurs/vecteurs propres c'est presque bon, j'ai reussi a porter la decomposition de Schur, il ne manque plus grand chose.

Voila, sinon pour la fonte de caracteres, de memoire le shell de KhiCAS/MicroPython n'a pas d'imperatif taille fixe. Pour KhiCAS sur la 35eii, ce ne sera pas possible d'ajouter une fonte car je n'ai plus d'espace libre (il reste moins d'1K dans la version francaise). Pour micropython, par contre il y a de la place.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 10/11/2022 23:17 | #


J'ai eu a nouveau un file lock ! Je pense que tu pourrais fermer les fichiers quand on appuie sur MENU, et les recharger si on le rouvre.
Parisse Hors ligne Membre Points: 481 Défis: 0 Message

Citer : Posté le 14/11/2022 17:42 | #


J'ai a peu pres finalise les fonctionnalites, et je propose une version 35eii et une version 90 au telechargement. C'est entre alpha et beta.
micropy 35eii
Micropy 90
Fonctionnalites:
1/ tas Python jusque 128K sur la 35 et 2560K sur la 90.
2/ coloration syntaxique dans l'editeur et dans le shell sur la 90, mise en valeur par soulignement dans l'editeur sur la 35. Parenthese match dans l'editeur sur les 2 modeles, dans le shell sur la 90. Deux choix de fontes dans l'editeur pour la 35.
3/ Menu F4 cmds donnant acces a une aide courte sur la plupart des commandes, avec possibilite de recopier et modifier un exemple
4/ acces a l'aide sur la commande en cours avec la touche shift-fraction, ou directement fraction dans le shell. Dans l'editeur fraction sert a indenter
5/ Les touches F1 a F6, shift F1 a shift F6 et alpha F1 a alpha F6 donnent acces a 18 menus rapides pour pouvoir facilement importer les modules math, turtle, etc.. Par exemple F3 char table permet d'acceder a une table de caracteres (on peut aussi y acceder avec shift-INS: inserer un caractere)
6/ 4 modules natifs arit (arithmetique), graphic (extension de casioplot, on peut aussi utiliser import casioplot ou import kandinsky pour la compatibilite Numworks), turtle, ion (offrant une certaine compatibilite avec la Numworks). Pour matplotl, on peut utiliser le script Python de Casio.

Le source de l'UI est commun (avec quand meme pas mal de #ifdef), et devrait pouvoir s'adapter pour d'autres interpreteurs sans trop de travail (j'essaierai surement un jour QuickJS) et j'envisage aussi de le porter sur TI Nspire CX/CX2, en rajoutant des ifdef...
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 20/11/2022 11:56 | #


J'ai un peu plus testé casioplot et j'ai fait une liste des différences :

Dans casioplot de PythonExtra get_pixel devrait retourner None si la position est en dehors de l'écran. La couleur devrait être facultative pour toute les fonction qui l'ont en argument et la taille par défaut de draw_string devrait être medium (je crois).
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 20/11/2022 15:37 | #


Je ne sais pas si ça a déjà été proposé mais il faudrait fix la fonction open() car elle renvoie constamment None.
Il faudrait aussi rajouter une lib Time qui permetrait d'interagir avec le temp (si ce n'a pas déja été fait).
Et dans la plus grande folie ce serait simpa d'voir un accès à libserial.

Merci
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 20/11/2022 15:40 | #


open() n'est pas cassé, juste pas encore supportée.

Le module time existe déjà et donne accès au temps, même si c'est que la base.

Pour le serial... plus tard peut-être. xD
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 274 Défis: 0 Message

Citer : Posté le 20/11/2022 15:48 | #


Je travail beaucoup avec le serial en ce moment donc je pense serial, je mange serial(es), je dort serial et je me dit que la vie serait moins dur si je pouvais coder avec serial dans python ...
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Précédente 1, 2, 3, 4, 5, 6 ··· 10 ··· 18, 19, 20 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 73 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd