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: 25087 Défis: 174 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.4 (Changelog)
Graph 35+E II / Prizm / Graph 90+E / Math+ / ClassPad : PythonExtra-pe-0.4.0-beta.zip


Aperçu de PythonExtra sur Graph 90+E. (Cliquez pour agrandir)


Aperçu de PythonExtra sur Graph 35+E II (FxPyEdit par Mb88)

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 ··· 10 ··· 20 ··· 22, 23, 24, 25, 26, 27 Suivante
Slyvtt Hors ligne Maître du Puzzle Points: 2612 Défis: 17 Message

Citer : Posté le 19/04/2025 09:20 | #


Merci beaucoup Lephe.
Super boulot de MaJ.

Le support du fxCP 400 est top. C'est l'ouverture de cette machine au Python, ce qui n'existait pas jusqu'à présent. C'est donc une date à marquer d'une pierre rouge.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Mb88 En ligne Rédacteur Points: 1237 Défis: 3 Message
Slyvtt Hors ligne Maître du Puzzle Points: 2612 Défis: 17 Message

Citer : Posté le 19/04/2025 13:26 | #


Moi j'ai commencé un truc pour CG et CP.
Peut être pour la v0.5.0
Who knows
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt Hors ligne Maître du Puzzle Points: 2612 Défis: 17 Message

Citer : Posté le 19/04/2025 13:52 | #


(c'est un moteur de coloration syntaxique)
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Mb88 En ligne Rédacteur Points: 1237 Défis: 3 Message

Citer : Posté le 19/04/2025 13:59 | #


J'ai vu le screenshot, ça a l'air magnifique.

Moi je suis en train de coder un éditeur pour fx et j'ai déjà fait un petit bout de code pour le tester (j'ai pas encore testé si ce code marche correctement avec micropython on calc oui c'est bon il fonctionne correctement):

from random import randint as r

# Some code in a comment: for i in range(10)

"""
A docstring with some code:
if not 1 in [1] and 1 is not None: print("Ok!")
"""

# Some code:

a = int(1000*2/2*10**0+1%1//1)
b = int(a*2/2*10**0+1%1//1)
class Test: # A useless class
  def __init__(self, something: int):
    self.hello = "Hello"
    self._something = something
    self.__private = 2.1e9
  def say_hi(self) -> None:
    print(f"Hi! A number: {self._something}.")

class RandomNumber(Test): # Something is random
  def __init__(self):
    super().__init__(r(1, 100))

random = RandomNumber()
random.say_hi()

i = 0
while (i := i+1) <= 100: print(i)



Farhi Hors ligne Membre Points: 1485 Défis: 0 Message

Citer : Posté le 19/04/2025 21:16 | #


Hello petite question, est-ce qu'il y a moyen de poser un pixel très rapidement comme en C++ avec gint_vram ou c'est pas possible ? Car dpixel si je ne me trompe pas fait a chaque fois une vérification des bordures non (et du coup c'est lent) ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Slyvtt Hors ligne Maître du Puzzle Points: 2612 Défis: 17 Message

Citer : Posté le 19/04/2025 21:22 | #


Non, tu n'as pas accès à la VRAM directement depuis PythonExtra.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Ptitjoz Hors ligne Membre Points: 289 Défis: 10 Message

Citer : Posté le 21/04/2025 19:03 | #


ah super cette mise à jour ! Merci à Lephe et à tous ceux qui ont participé à ce travail.

sur la casio graph 35+ EII j'ai commencé à voir les nouveautés ou intégrations (Fonts, moteur de gris et Files)
Je ferai un retour à l'occasion.

pour le moteur de grisje ne saisis pas les différences entre dark darken light et lighten


Slyvtt Hors ligne Maître du Puzzle Points: 2612 Défis: 17 Message

Citer : Posté le 21/04/2025 19:11 | #


Dark et Light correspondent "vraiment" à des couleurs (gris foncé et gris clair) respectivement, tandis que Darken et Lighten augmentent et diminuent respectivement la couleur

darken fait passer : WHITE > LIGHT > DARK > BLACK
lighten fait passer : BLACK > DARK > LIGHT > WHITE

tu peux voir l'effet en superposant des dessins de formes par exemple
Dans un car tu auras la couleur que tu veux sans s'occuper de ce qui était avant, dans l'autre tu auras un décalage de couleur qui prendra en compte l'image précédente.

Pas facile à expliquer cette affaire (Note, c'est le même fonctionnement que le moteur de gris de gint)
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Farhi Hors ligne Membre Points: 1485 Défis: 0 Message

Citer : Posté le 21/04/2025 21:42 | #


Hello !
Petite question, est-ce qu'il y a moyen de décharger une image chargé avec : img = gint.image(...) ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 25087 Défis: 174 Message

Citer : Posté le 21/04/2025 21:54 | #


Tu peux del l'image. J'ai repassé le code tout à l'heure et ça doit détruire aussi les bytes qui vont avec.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 289 Défis: 10 Message

Citer : Posté le 21/04/2025 22:52 | #


merci pour les explications.
Pour le moteur de gris
si j'ai bien compris la doc, le gris n'existe pas vraiment ? c'est une illusion d'otique (persistance rétinienne) ; le moteur de gris affiche le noir un certain temps et l'efface et c'est en boucle ; l'idée est bien trouvée. on le constate d'avantage avec des grandes surfaces où on voit le balayage et si on joue avec ftune c'est plus ou moins flagrant.
quand à émulateur sur ma vielle machine l'écran clignote plus ou moins et ça ne ne fonctionne pas vraiment.
Pour les fonts j'ai du renommer les fichiers car les noms étaient trop longs pour l'émulateur et ça fonctionne bien




Lephenixnoir Hors ligne Administrateur Points: 25087 Défis: 174 Message

Citer : Posté le 21/04/2025 23:10 | #


Oui c'est ça, le moteur de gris est une illusion. Les paramètres actuels ne sont pas optimaux, mais ça marche bien si on fait attention à la quantité de gris à l'écran. Sur les modèles avec un écran moins bon (notamment des TI de l'époque) l'illusion est si bonne qu'on ne la voit pas du tout, mais ce n'est pas le cas sur les CASIO.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Farhi Hors ligne Membre Points: 1485 Défis: 0 Message

Citer : Posté le 21/04/2025 23:13 | #


Autre petite question, est-ce qu'il est possible de draw une image (plus précisément une subimage) en miroir (flip horizontal) ? (sans a avoir a recréer une image en inversé)
vu qu'il n'y a plus les flag, je voulais savoir s'il y avait un autre moyen
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 25087 Défis: 174 Message

Citer : Posté le 21/04/2025 23:16 | #


J'ai failli l'ajouter aujourd'hui mais y'a encore des subtilités sur l'intégration. Pas dit que je puisse le fournir d'ici Dimanche. Tu as deux workarounds possibles pour l'instant, à savoir préconvertir l'image retournée, ou générer le miroir en Python en construisant le bytes qui va bien. Si ça ne marche pas pour ton cas d'usage, je peux essayer de refaire un coup sur le module demain.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Farhi Hors ligne Membre Points: 1485 Défis: 0 Message

Citer : Posté le 21/04/2025 23:24 | #


Je cherche à avoir de bonnes performances et que ça soit léger, dans l'idéal ça serait bien de l'avoir, car j'ai les sprites de mon perso dans un sens, ça éviterait de dupliquer ou de créer un goulot d'étranglement pour régénérer les spirites. Surtout que j'ai aussi les sprites de la map.
Donc si ça ne te prend pas beaucoup de temps à l'ajouter nativement, ça m'aiderait en effet.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 25087 Défis: 174 Message

Citer : Posté le 21/04/2025 23:34 | #


Ok je regarde d'ici demain soir, je crois que je peux ajouter qu'une partie de l'API pour satisfaire ton besoin immédiat en esquivant les difficultés.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 289 Défis: 10 Message

Citer : Posté le 22/04/2025 16:44 | #


Petite question, je suppose que, maintenant qu'il y a un moteur de gris, on ne peut pas afficher avec dimage() des images en grayscale ? et qu'on est toujours limité au noir et blanc par cette méthode


Lephenixnoir Hors ligne Administrateur Points: 25087 Défis: 174 Message

Citer : Posté le 22/04/2025 18:38 | #


Si tu peux, une fois que tu actives le moteur de gris, toutes les fonctions de dessin deviennent des fonctions 4 couleurs.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2612 Défis: 17 Message

Citer : Posté le 22/04/2025 18:42 | #


Par contre je suis en train de me demander (j'ai jamais utilisé dans gint en fait), au niveau de la conversion avec fxconv, il y a un truc à spécifier pour le format des images pour être soit en N&B ou en 4 tons de gris ?
Ou alors on est tout le temps en 4 tons et quand le moteur de gris est inactif alors (DARK ou NOIR) donnent NOIR et (LIGHT ou BLANC) donnent BLANC ?
Je ne me souviens pas d'avoir vu des formats pour les monochromes.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 25087 Défis: 174 Message

Citer : Posté le 22/04/2025 19:27 | #


Y'a des formats fxconv pour les monochromes. Je sais plus ce qui se passe si tu essaies de dessiner une image grise quand le moteur est inactif mais je ne vois pas de version de la fonction interne pour "approximer" le gris donc je pense que ça doit juste ignorer l'image et ne rien dessiner (i.e. erreur).
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 22, 23, 24, 25, 26, 27 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

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2025 | Il y a 93 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