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: 24240 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 ··· 6, 7, 8, 9, 10, 11, 12 ··· 19, 20, 21 Suivante
Lephenixnoir En ligne Administrateur Points: 24240 Défis: 170 Message

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

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 :
File "A/B/C/test.py" line in <module> ImportError:no module named 'imp1'

Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

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 !!
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

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).
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

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é
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Lephenixnoir En ligne Administrateur Points: 24240 Défis: 170 Message

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.

Tuper4 a écrit :
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.

Tuper4 a écrit :
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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 225 Défis: 10 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 ?
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

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

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

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
diff PythonExtra-relimport2-194837/PythonEx.g1a PythonExtra-relimport3-194884/PythonEx.g1a

Comme je n'ai pas de retour je pense que ces 2 binaires sont identiques

diff PythonExtra-relimport2-194837/PythonExtra.g3a PythonExtra-relimport3-194884/PythonExtra.g3a

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

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

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

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

Ptitjoz Hors ligne Membre Points: 225 Défis: 10 Message

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

Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

Citer : Posté le 27/12/2023 20:36 | #


de mon coté, ca marche nikel
Ptitjoz a écrit :
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
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Ptitjoz Hors ligne Membre Points: 225 Défis: 10 Message

Citer : Posté le 27/12/2023 21:19 | #


Tuper4 a écrit :
de mon coté, ca marche nikel

Tsuper pour toi

Ptitjoz a écrit :
Si erreur de syntaxe, impossible d'enregistrer / de détruire (mais c'était déjà le cas avant).

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

Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

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"
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Ptitjoz Hors ligne Membre Points: 225 Défis: 10 Message

Citer : Posté le 29/12/2023 14:02 | #


Petite question
dtext_opt(x, y, fg, bg, halign, valign, str, size)

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

Fcalva En ligne Membre Points: 521 Défis: 9 Message

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
Pc master race - Apréciateur de Noctua moyen
Caltos : G90+E, FX-92+ (x2)
Ptitjoz Hors ligne Membre Points: 225 Défis: 10 Message

Citer : Posté le 29/12/2023 14:45 | #


ah oui merci.
et pour changer la taille (police/font) est-ce possible ?
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

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

Citer : Posté le 01/01/2024 23:17 | #


Merci pour les tests !

Ptitjoz a écrit :
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.

Les tests avec répertoire et sous-répertoires fonctionnent

Bon c'est déjà ça !

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.

À 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

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.

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 ?

Peu probable, normalement...

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

Ça ne devrait pas être le cas, je vais tester.

Je ne sais pas si c'est possible de faire appel à un import d'un niveau supérieur ou de la racine.

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.

Les modules natifs turtle, matplotlib et random ne fonctionnent pas, math et casioplot fonctionnent.

random devrait, turtle et matplotlib ne sont pas (encore) intégrés comme Tuper l'a relevé. On peut envisager de les ajouter.

casioplot et gint fonctionnent par ailleurs ensemble (même si n'est peut-être pas une bonne idée...).

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.

et pour changer la taille (police/font) est-ce possible ?

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

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.



Lephenixnoir a écrit :

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

Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

Citer : Posté le 02/01/2024 14:27 | #


Ptitjoz a écrit :
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.
Meme probleme ici Lephe'
Ptitjoz a écrit :
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
Pour les classs, je peux t'aider a en faire (c'est ca que j'utilise pour l'oiseau de mon flappy bird, qui n'est toujours pas fini d'ailleurs )
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Précédente 1, 2, 3 ··· 6, 7, 8, 9, 10, 11, 12 ··· 19, 20, 21 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 63 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