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 » L'utilisation de l'add-in ExtraPython pour le calcul matriciel sur Fx 9750 Giii
Eliomiller Hors ligne Membre Points: 6 Défis: 0 Message

L'utilisation de l'add-in ExtraPython pour le calcul matriciel sur Fx 9750 Giii

Posté le 04/08/2023 02:54

Cher communauté,

Je voudrais partager avec vous une problématique que je rencontre concernant les capacités matricielles du module MicroPython sur ma calculatrice Casio fx 9750 giii (équivalent internationale de la Graph 35 E++). Comme beaucoup d'entre vous le savent, le module MicroPython inclus dans la calculatrice est assez limité, notamment en ce qui concerne les calculs matriciels, qui sont essentiels pour mes besoins en ingénieurie. J'ai récemment découvert une alternative prometteuse, le port PythonExtra, qui vise à étendre les fonctionnalités de MicroPython pour les calculatrices Casio. Ce port offre des perspectives intéressantes et pourrait répondre à mes besoins en matière d'opérations matricielles.

Cependant, même avec PythonExtra, je me suis heurté à des difficultés pour exécuter des scripts Python qui fonctionnent parfaitement sur PC, notamment ceux qui utilisent le calcul matriciel standard sans numpy et ceux utilisant le module numpy. Malgré mes efforts, je continue de rencontrer des erreurs lors de l'exécution de ces scripts sur ma calculatrice (ci-joint un exemple typique). J'ai également essayé la version de Dr. Parisse, mais j'ai obtenu le même résultat avec une série d'erreurs qui m'empêchent d'exploiter pleinement ces fonctionnalités matricielles.

C'est pourquoi j'en appelle à la communauté pour solliciter votre expertise et vos conseils. Si certains d'entre vous ont réussi à faire fonctionner ce type de script sur la Graph 35 E++ avec PythonExtra ou autre méthodes, je serais extrêmement reconnaissant de recevoir vos instructions ou astuces.

En outre, j'ai découvert un module MicroPython appelé umatrix (https://github.com/iyassou/umatrix), qui semble répondre parfaitement à mes besoins en matière d'opérations matricielles. Cependant, l'importation de ce module dans l'environnement Python original a échoué en raison de l'utilisation de la classe @property, qui n'est pas prise en charge par le MicroPython de Casio. Je me demande si PythonExtra prend en charge cette fonctionnalité, ce qui me permettrait d'utiliser umatrix sur ma calculatrice.

Enfin, je me demande s'il serait possible d'ajouter le module ulab à cette distribution de MicroPython sur la calculatrice. Si vous avez des instructions ou des conseils sur la faisabilité de cette démarche, je serais ravi de les entendre.

Je tiens à remercier chaleureusement Lephé pour ses conseils concernant PythonExtra, qui semble être une base intéressante pour améliorer les capacités matricielles de la calculatrice. Je suis conscient que je ne suis pas le seul à faire face à ces défis, et je suis convaincu que la communauté peut apporter des solutions et des idées novatrices pour améliorer l'expérience Python.

Merci infiniment pour votre temps et votre soutien.

Fichier joint


Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 04/08/2023 09:54 | # | Fichier joint


Vu que la bibliothèque umatrix est assez simple, je l'ai modifiée pour retirer les @property.

Le script en PJ fonctionne parfaitement (en tout cas comme la bibliothèque originale).

Seule chose que ça modifie, les méthodes accessible en tant que propriétés doivent être appelées en tant que méthode (donc avec les parenthèses) :

A = matrix([1, 2, 3], [4, 5, 6], [7, 8, 9])

A.order()
A.is_square()
A.shape()
A.rows  # Attention c'est la seule "vraie" propriété !
A.cols()
A.det()
A.inverse()
A.transpose()
A.trace()


Edit : Lephe tu pense que c'est jouable d'ajouter le décorateur à l'interpréteur ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 04/08/2023 10:01 | #


Je répondrai plus en détail quand j'aurai un peu plus de temps mais

Edit : Lephe tu pense que c'est jouable d'ajouter le décorateur à l'interpréteur ?

@property est déjà supporté.

class X:
  @property
  def y(self):
    return 2

x = X()
print(x.y)

>>> import x
2

Le bug doit venir d'ailleurs.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Eliomiller Hors ligne Membre Points: 6 Défis: 0 Message

Citer : Posté le 04/08/2023 12:41 | #


J'ai réessayé de faire un test matriciel simple avec cette fois-ci Python Extra et umatrix (sans enlever le @property), mais cela donne une erreur MemoryError: memory allocation failed, allocating %u bytes.
Mon code initial est simplement :
from umatrix import *
A = matrix([1, 2, 3], [4, 5, 6], [7, 8, 9])
M = matrix([12, 23, 31], [40, 50, 60], [71, 87, 98])

Sur le module Casio officiel ainsi que sur PC, si j'enlève le @property, alors ça donne des erreurs si j'essaie d'ajouter les matrices ensemble :
A+A ou A+M donne:
File "umatrix.py", line 103, in __add__
    assert shape == other.shape
AssertionError

Pour A*2 ca donne sur le module casio officiel:
TypeError: unsupported  types for : 'matrix' , 'int'

Sur PC, A * 2 marche normalement.
Le module PythonExtra ne me permet même pas de lancer le script pour commencer à tester, avec ou sans @property.
Je suis tout confus quant à ce que je dois faire, et le pire c'est que les formules que j'essaie de programmer sont des sommes interactives (comme dans l'exemple que j'ai ci-joint au début) donc je pense que ça va être la galère pour faire fonctionner...
Parisse Hors ligne Membre Points: 485 Défis: 0 Message

Citer : Posté le 12/08/2023 18:45 | #


micropy a un module natif linalg qui utilise des listes de listes pour stocker une matrice et des fonctions comme add, mul pour additionner/multiplier des matrices, et au-dessus un module numpy qui permet d'utiliser quelques commandes avec une syntaxe proche de numpy, mais évidemment pas avec une compatibilité complète, loin de là! Si vous trouvez un bug en les utilisant, pouvez-vous m'indiquer les commandes utilisées?
Ceci étant, si vous voulez faire du calcul matriciel sur la 35eii ou son équivalent et pas juste utiliser sur calculatrice un programme Python numpy existant, je vous conseille plutot d'installer khicas.g1a et d'utiliser directement les commandes de Xcas pour faire du calcul matriciel, vous disposez d'un assistant pour rentrer une matrice, il y a de nombreuses fonctions mathématiques déjà programmées (inverse, déterminant, réduction sous forme échelonnée, valeurs, vecteurs propres, ...) avec des menus pour y accéder et de l'aide en ligne, la syntaxe est simple (+ ou * pour additionner, multiplier des matrices...) et si vous voulez écrire des programmes, vous pouvez aussi le faire en syntaxe Python.
Lephenixnoir En ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 20/08/2023 13:13 | # | Fichier joint


Désolé pour le délai, j'ai fini par oublier de regarder. o(x_x)o

Sur Graph 90+E, le script suivant avec une version non modifiée de umatrix.py (donc avec les @property)

from umatrix import *
A = matrix([1, 2, 3], [4, 5, 6], [7, 8, 9])
M = matrix([12, 23, 31], [40, 50, 60], [71, 87, 98])
print(A+A)
print(A+M)
print(A*2)

se lance et affiche A+A et A+M avant d'échouer sur A*2.

J'ai regardé dans MicroPython et en effet j'avais juste oublié d'activer les opérateurs __mul__, __rmul__, etc. J'ai changé dans les sources et donc maintenant l'exemple marche, y compris avec A*2 et 2*A. Je joins un g3a.

Sur Graph 35+E II, ça échoue toujours mais par manque ed RAM (MemoryError: memory allocation failed). Ça c'est plus subtil, je vais voir ce que je peux faire...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 20/08/2023 21:39 | # | Fichier joint


Pour info, j'ai convergé vers le plan d'aller chercher la mémoire de l'add-in Python officiel pour l'ajouter aussi à PythonExtra. J'ai fait quelques étapes de reverse-engineering pour aller chercher les adresses, mais je suis arrivé au bout du temps que j'avais aujourd'hui, donc il faudra que je continue une autre fois.

En attendant, la solution facile c'est de retirer du code pas nécessaire de umatrix.py...

(J'ai quand même rajouté de la RAM, 32 ko → 45 ko environ, je joins un g1a.)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Eliomiller Hors ligne Membre Points: 6 Défis: 0 Message

Citer : Posté le 21/08/2023 19:58 | #


Parisse a écrit :
micropy a un module natif linalg qui utilise des listes de listes pour stocker une matrice et des fonctions comme add, mul pour additionner/multiplier des matrices, et au-dessus un module numpy qui permet d'utiliser quelques commandes avec une syntaxe proche de numpy, mais évidemment pas avec une compatibilité complète, loin de là! Si vous trouvez un bug en les utilisant, pouvez-vous m'indiquer les commandes utilisées?
Ceci étant, si vous voulez faire du calcul matriciel sur la 35eii ou son équivalent et pas juste utiliser sur calculatrice un programme Python numpy existant, je vous conseille plutot d'installer khicas.g1a et d'utiliser directement les commandes de Xcas pour faire du calcul matriciel, vous disposez d'un assistant pour rentrer une matrice, il y a de nombreuses fonctions mathématiques déjà programmées (inverse, déterminant, réduction sous forme échelonnée, valeurs, vecteurs propres, ...) avec des menus pour y accéder et de l'aide en ligne, la syntaxe est simple (+ ou * pour additionner, multiplier des matrices...) et si vous voulez écrire des programmes, vous pouvez aussi le faire en syntaxe Python.


Je vous remercie sincèrement pour les informations que vous avez partagées concernant Micropy, ainsi que pour vos conseils sur l'utilisation de khicas.g1a pour les calculs matriciels. Votre expertise est inestimable et je suis reconnaissant de pouvoir bénéficier de vos connaissances. En ce qui concerne khicas.g1a, je reconnais son potentiel en tant qu'outil puissant pour le calcul matriciel. Cependant, je trouve que son utilisation peut être un peu complexe, surtout pour moi qui ne suis pas très à l'aise avec ces concepts avancés. Actuellement, je l'utilise principalement pour des calculs plus simples de type calcul différentiel, intégration algébrique et autre. Je me demande néanmoins si je pourrais exploiter davantage ses fonctionnalités pour automatiser mes calculs et gagner en efficacité. Auriez-vous des suggestions ou des ressources que je pourrais consulter pour mieux maîtriser khicas.g1a et en tirer le meilleur parti pour mes besoins spécifiques?

Je vous remercie également pour votre suggestion d'utiliser les modules natifs et numpy dans Micropy pour les opérations matricielles. Cependant, je me sens plus à l'aise avec la programmation sur l'ordinateur et ensuite de porter le programme. J'ai également installé Xcas sur mon ordinateur, mais je ne suis pas très sûr de la meilleure manière de l'utiliser pour automatiser mes calculs et ensuite porter le résultat sur la calculatrice. Si vous avez des conseils supplémentaires à partager ou des ressources spécifiques à recommander à ce sujet, je vous en serais extrêmement reconnaissant.

Lephenixnoir a écrit :
Pour info, j'ai convergé vers le plan d'aller chercher la mémoire de l'add-in Python officiel pour l'ajouter aussi à PythonExtra. J'ai fait quelques étapes de reverse-engineering pour aller chercher les adresses, mais je suis arrivé au bout du temps que j'avais aujourd'hui, donc il faudra que je continue une autre fois.

En attendant, la solution facile c'est de retirer du code pas nécessaire de umatrix.py...

(J'ai quand même rajouté de la RAM, 32 ko → 45 ko environ, je joins un g1a.)


Merci pour ta réponse et d'avoir pris le temps d'analyser le problème avec umatrix.py sur les calculatrices Graph 90+E et Graph 35+E II.

Je suis heureux d'apprendre que tu as résolu le problème en activant les opérateurs manquants dans les sources et en proposant une version mise à jour. Je vais essayer la nouvelle version pour évaluer son fonctionnement et je vous tiendrai informé dès que possible. Je suis un peu étonné quant au problème de mémoire vive entre la Graph 90+E et la Graph 35+E II, étant donné qu'elles ont à peu près la même quantité de RAM disponible sur papier. Peut-être que la gestion de la mémoire diffère légèrement entre les deux modèles, ce qui pourrait expliquer pourquoi l'un réussit et l'autre échoue ? As-tu une idée concernant l'approximation de la quantité de RAM nécessaire pour l'exécution d'un script en général? Est-il possible de l'estimer sur ordinateur ?

Je te remercie pour tes efforts dans la résolution de ce problème et pour l'amélioration du module PythonExtra. Cela ouvrirait certainement de nouvelles possibilités passionnantes. S'il te plaît, tiens-moi au courant s'il y a du nouveau.

Cordialement.
Lephenixnoir En ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 21/08/2023 20:28 | #


Je suis un peu étonné quant au problème de mémoire vive entre la Graph 90+E et la Graph 35+E II, étant donné qu'elles ont à peu près la même quantité de RAM disponible sur papier.

La même quantité de mémoire sur papier ? Si le nombre que tu as en tête est 65 ko, celui annoncé par Casio, alors c'est la taille de la mémoire principale (F1 dans le menu MEMORY) dans laquelle sont stockés les informations basiques de la calculatrice comme tes paramètres, ton historique de calcul, les formules de courbes ou les programmes Basic de l'application PRGM. Ce nombre est, dans la majorité des cas, très peu pertinent.

En réalité, la puce RAM de la Graph 35+E II fait 512 ko tandis que la puce RAM de la Graph 90+E fait 8 Mo. Tout n'est pas utilisable, à la fin du décompte sur Graph 35+E II un add-in comme PythonExtra peut généralement utiliser ~45 ko facilement, tandis que sur la Graph 90+E c'est plutôt de l'ordre de ~700 ko, et on peut vite monter à 2-3 Mo si on sort des sentiers les plus classiques. Du coup, l'écart est très conséquent en fait.

As-tu une idée concernant l'approximation de la quantité de RAM nécessaire pour l'exécution d'un script en général? Est-il possible de l'estimer sur ordinateur ?

Si tu essaies sur l'ordinateur ce ne sera pas avec MicroPython (et pas la même architecture) donc ça ne te donnera pas d'information fiable. Ce que tu peux faire, quand le script marche, c'est afficher la quantité de mémoire disponible après l'avoir chargé. PythonExtra fournit la fonction suivante :

import gc
gc.mem_free()

qui te donne la quantité de mémoire disponible pour MicroPython, en octets. Sur Graph 90+E par exemple, je peux voir cette quantité diminuer quand j'importe le programme de test ci-dessus :

MicroPython 3df7eae26-dirty on 2023-08-20; sh7305 with sh-4a
Type "help()" for more information.
>>> import gc
>>> gc.mem_free()
177680
>>> from test import *
[  2,  4,  6,
   8, 10, 12,
  14, 16, 18]
[ 13, 25,  34,
  44, 55,  66,
  78, 95, 107]
>>> gc.mem_free()
156560

Malheureusement c'est pas super précis, comme tu peux le voir ce nombre suggère que 20 ko suffit alors que non. Dans l'ensemble la méthode la plus courante est plutôt empirique. La mémoire est consommée par (1) le code des fichiers .py, et (2) les variables créées dans le programme. Du coup généralement on essaie d'abord de voir si on arrive à charger tous les modules sans commencer les calculs, et ensuite de voir si les variables tiennent dans la mémoire. C'est un peu lent, j'en conviens...

Je regarderai si peux ajouter une fonction pour mesurer le pic de consommation de mémoire, comme ça on pourrait regarder ce pic sur Graph 90+E pour avoir une référence (note que ça marcherait aussi sur l'émulateur si tu n'as pas de Graph 90+E).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 485 Défis: 0 Message

Citer : Posté le 26/08/2023 08:11 | #


Eliomiller a écrit :

Je vous remercie sincèrement pour les informations que vous avez partagées concernant Micropy, ainsi que pour vos conseils sur l'utilisation de khicas.g1a pour les calculs matriciels. Votre expertise est inestimable et je suis reconnaissant de pouvoir bénéficier de vos connaissances. En ce qui concerne khicas.g1a, je reconnais son potentiel en tant qu'outil puissant pour le calcul matriciel. Cependant, je trouve que son utilisation peut être un peu complexe, surtout pour moi qui ne suis pas très à l'aise avec ces concepts avancés. Actuellement, je l'utilise principalement pour des calculs plus simples de type calcul différentiel, intégration algébrique et autre. Je me demande néanmoins si je pourrais exploiter davantage ses fonctionnalités pour automatiser mes calculs et gagner en efficacité. Auriez-vous des suggestions ou des ressources que je pourrais consulter pour mieux maîtriser khicas.g1a et en tirer le meilleur parti pour mes besoins spécifiques?

C'est difficile de répondre sans en savoir un peu plus sur ce que vous voulez faire comme calculs matriciels.


Je vous remercie également pour votre suggestion d'utiliser les modules natifs et numpy dans Micropy pour les opérations matricielles. Cependant, je me sens plus à l'aise avec la programmation sur l'ordinateur et ensuite de porter le programme. J'ai également installé Xcas sur mon ordinateur, mais je ne suis pas très sûr de la meilleure manière de l'utiliser pour automatiser mes calculs et ensuite porter le résultat sur la calculatrice. Si vous avez des conseils supplémentaires à partager ou des ressources spécifiques à recommander à ce sujet, je vous en serais extrêmement reconnaissant.

Il suffit d'exporter la session de calcul de Xcas depuis le menu Fich>Exporter comme>Khicas Casio. Ca génère un fichier d'extension .xw qu'on peut ensuite ouvrir depuis khicas sur les Casio. Cela permet de transférer les commandes de calcul et les programmes.
Sur Xcas, il y a un peu d'aide sur l'utilisation des matrices/vecteurs dans le tutoriel (menu Aide, Débuter en calcul formel, tutoriel), puis dans Aide>Manuels>référence. Sur la programmation, il y a le tutoriel algorithmique lycée et le le manuel de programmation (menu Aide, Manuels, Programmation). Ils sont écrits dans le langage natif de Xcas, mais c'est sans doute inutile de les consulter, vous pouvez utiliser la syntaxe en Python que Xcas comprend. La principale différence avec du code matriciel écrit en Python/numpy, c'est que les matrices (listes de listes) sont des objets natifs de Xcas, il n'est pas nécessaire d'importer de modules pour les manipuler. Par exemple on peut dupliquer la fonction trace de Xcas avec le code suivant (à créer de préférence dans un niveau programme, menu Prg>Nouveau programme)

def tr(A):
  l=len(A)
  res=0
  for j in range(l):
    res += A[j,j]
  return res

ensuite dans un niveau de calcul normal on tape A:=randmatrix(3,3); tr(A) ou A:=[[1,2],[3,4]]; tr(A)
Vous pouvez mettre au point un programme avec la commande debug(tr(A)) qui permet d'exécuter instruction par instruction le programme, en affichant la valeur des variables locales. Cela fonctionne également dans l'environnement calculatrices.

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 57 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