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 En ligne Administrateur Points: 24699 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 ··· 8, 9, 10, 11, 12, 13, 14 ··· 20, 21, 22 Suivante
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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
dcircle( 20, 20, 15, C_DARK, C_BLACK )
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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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 :

dcircle(x, y, r, *, fill=C_NONE, border=C_NONE)
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, fill=C_BLACK)
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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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é
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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 à
dcircle(20, 20, 15, border=C_BLACK, fill=False)
.

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
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Tuper4 Hors ligne Membre Points: 889 Défis: 19 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!
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

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!
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Iard Hors ligne Membre Points: 14 Défis: 0 Message

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.
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

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
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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 :

def game():
  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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 07/01/2024 15:49 | #


Ptitjoz a écrit :

Quant à turtle je n'en vois pas trop l'utilité mais ce n' est qu'un avis personnel.
moi je la trouve tres utile pour les débutants en graphismes
Ptitjoz a écrit :

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.
Oh oui, ce serait formidable !!
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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).

  • Mis à jour MicroPython en version 1.22 (spécifiquement v1.22.0-10-gdc2a4e3cb)
    • Ça a implicitement corrigé un bug dans lequel les fichiers importés n'étaient pas fermés si une erreur se produisait durant l'import, ce qui empêchait ensuite de les éditer dans d'autres applications avec l'erreur "Données protégées"
  • Activé les opérateurs surchargés, à la fois normaux (e.g. __add__) et inversés (e.g. __rmul__)
  • Un peu plus de mémoire sur Graph 35+E II, bien que toujours trop peu
  • Modifié les imports système de fichier pour qu'ils soient relatifs au fichier courant
  • Ajouté les fonctions de gint pour détecter les changements d'état des touches sans lire les événements :
    • cleareventflips() : Sauvegarde l'état du clavier
    • keypressed() : Indique si la touche était relâchée à la dernière sauvegarde et est maintenant pressée
    • keyreleased() : Indique si la touche était pressée à la dernière sauvegarde et est maintenant relâchée
  • Ajouté des nouvelles fonctions à gint pour dessiner des cercles et des ellipses :
    • C_RGB() [Graph 90+E] : Construit des couleurs à partir de trois composantes entre 0 et 31
    • dcircle() : Dessine un cercle, avec remplissage et bordure
    • dellipse() : Dessine une ellipse (sans rotation), avec remplissage et borduree
  • Activé le deuxième argument de round() pour le support de turtle/matplotlib
  • Corrigé un bug de gint qui provoquait la répétition des touches directionnelles durant les longs calculs même après que la touche ait été relâchée
  • Ajouté les polices officielles de CASIO à casioplot.draw_string() au lieu d'utiliser celle par défaut de gint sur Graph 90+E
    • Ces polices seront disponibles via dfont() quand dfont() sera ajoutée
  • Corrigé des comportements de dessin pas très clean avec casioplot et gint en donnant le contrôle de l'écran au programme dès que le module est importé

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 24699 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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 !!!
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

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
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Slyvtt En ligne Maître du Puzzle Points: 2422 Défis: 17 Message

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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Précédente 1, 2, 3 ··· 8, 9, 10, 11, 12, 13, 14 ··· 20, 21, 22 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