Journées APMEP 2020 : Nouveautés matplotlib.pyplot et turtle, OS 3.40 et 3.50
Posté le 19/10/2020 13:41
Juste avant les journées APMEP de cette année, Casio a publié une mise à jour des modules Python matplotlib et turtle utilisés au lycée. En plus des modifications dans les fichiers
.py, cette mise à jour s'accompagne de nouvelles versions de l'OS :
• La version 3.40 pour la Graph 35+E II et les fx-9750G III et fx-9860G III
• La version 3.50 pour la Graph 90+E et la fx-CG 50
Téléchargement et installation des nouveaux OS : sur le site de Casio Éducation
Les modèles internationaux fx-9750G III et fx-9860G III grimpent directement de la version 3.21 à la version 3.40, gagnant du même coup les modules de tracé et cette toute nouvelle mise à jour.
Les modèles matplotlib et turtle de Casio sont déjà parmi les plus fidèles disponibles sur calculatrice graphique. Nous avons déjà analysé leur utilisation dans notre article
Rendu graphique en Python : Découverte de matplotlib et turtle.
Les images de cet article sont fournies par
Critor : merci !
matplotlib.pyplot et turtle disponibles en mode examen
La nouveauté majeure c'est bien sûr que
matplotlib.pyplot et turtle sont maintenant disponibles en mode examen sur les modèles français, ce qui est naturel pour des outils au programme et que les élèves sont supposés utiliser tout au long de l'année.
Le code des modules est maintenant intégré à l'OS et ne nécessite même plus de transférer les fichiers Python. Heureusement, il n'est pas bien difficile d'aller le lire et nous avons donc extrait le code pour vous.
Voir le logiciel : Libs Python Graph 35+E II et Graph 90+E
C'est cette modification qui nécessite une nouvelle version de l'OS plutôt que le simpe partage de nouveaux fichiers
.py. Dans le futur, si ces scripts sont encore mis à jour il y aura certainement d'autres versions de l'OS pour la même raison.
(Les modules pourraient presque être compilés nativement en fait.)
Les modèles internationaux bénéficient des nouvelles modifications des modules mais pas de leur intégration en mode examen.
Nouveautés turtle
Le principal changement est la correction de la fonction
pensize() qui ne marchait pas jusqu'à présent. En effet, peu importe la taille spécifiée, le stylo faisait toujours 1 pixel de large. Cette fonction a maintenant été corrigée et accepte des tailles entières entre 1 et 5, donnant une forme circulaire au stylo.
En interne le module utilise une variable
pen_pixels qui décrit une image, et dont on peut abuser par exemple pour dessiner en double. L'encodage est similaire à la bibliothèque
Sprites Python par
Oskar.
Aures changements divers :
• Les angles sont calculés modulo 360.
•
pencolor() supporte en argument tous les objets dont
len() vaut 3 et ayant trois composantes
[0],
[1] et
[2].
• Des fonctions ont été renommées avec un underscore (pour les « cacher ») mais on peut toujours y acéder.
• La tortue est desinnée deux fois moins souvent pour aller plus vite.
Nouveautés matplotlib.pyplot
L'intégration du module à l'OS a permis de passer la dernière barrière séparant le module de son équivalent pour PC : le nommage. Comme le système de fichiers de la Graph 35+E II et de la Graph 90+E est essentiellement limité à des noms de 8 lettres, le module
matplotlib.pyplot a jusqu'ici été diffusé via
matplotl.py.
Le module maintenant intégré à l'OS s'affranchit de cette limite et s'appelle donc
matplotlib.pyplot.
Il y a également eu des changements sur les fonctions en elles-mêmes. Initialement, Casio avait ajouté au module une fonction personnalisée
boxplotFR() pour dessiner des diagrammes en boîtes à moustache avec les quartiles français.
Désormais, cette fonctionnalité fait partie de la fonction
boxplot(), qui a un nouvel argument optionnel :
•
boxplot_type="std" pour le diagramme international (par défaut)
•
boxplot_type="fr" pour le diagramme français
De même, une nouvelle fonction a été ajoutée pour les histogrammes,
hist(), avec également un paramètre optionnel pour sélectionner ou non la convention française que l'aire des bandes (et pas leur hauteur) indique la valeur.
•
hist_type="std" pour l'histogramme international (par défaut)
•
hist_type="fr" pour l'histogramme français
Et enfin, une nouvelle fonction
grid() pour afficher les grilles. Le tracé est en pointillés sur Graph mono, ce qui est important pour préserver la lisibilité.
Ce qui nous amène à la seule mauvaise nouvelle dans cette mise à jour. Sur Graph 90+E, la fonction
arrow() a été modifée pour remplir les pointes de flèches à la façon du module
matplotlib original. Cela part d'une bonne intention, mais rend la fonction beaucoup plus lente et beaucoup plus lourde qu'avant.
Le problème vient de la façon dont le remplissage est fait.
arrow() calcule une série de lignes à tracer pour remplir la pointe de flèche, et appelle
plot() pour réaliser le dessin. Sauf que
plot() stocke tout dans des variables globales jusqu'au moment où l'on appelle
show(), et donc la mémoire se remplit très vite. Surtout qu'il y a toujours exactement 15 lignes de remplissage, même quand la flèche est toute petite.
D'après les tests de Critor, la mémoire se remplit dès que 32 vecteurs sont dessinés alors qu'on pouvait monter à au moins 180 avant. Et il faut compter deux à trois fois plus de temps pour dessiner les vecteurs.
Du reste, le fichier a beaucoup été retravaillé, et pas mal de code a été compacté au passage !
• Le fichier passe
de 23k à 18k sur Graph 35+E II ;
• Le fichier passe
de 23k à 22k sur Graph 90+E (la différence c'est les ajouts sur
arrow()).
Nouveautés casioplot
Pour ceux qui ne sont pas familiers avec les modules Python sur Casio,
casioplot est le module fourni par Casio pour faire les opérations minimales de dessin : afficher des pixels, rafraîchir l'écran... et qui est utilisée par
turtle et
matplotlib pour le rendu.
Ce module ne répond à aucun standard en particulier mais ressemble d'assez près à ce que les autres constructeurs ont mis en place. L'
article de découvert de matplotlib et turtle en analyse rapidement les contenus.
• La fonction
clear_screen() est désormais visible dans le catalogue.
Conclusion
Voilà qui conclut le tour de ces mises à jour ! Beaucoup de bonnes choses et une seule régression à déplorer, bravo Casio !
On se rappellera que :
•
matplotlib.pyplot et turtle sont maintenant accessibles en mode examen
• matplotl s'appelle maintenant matplotlib.pyplot et a été bien allégé sur Graph 35+E II
• Des fonctions
hist() et
grid() ont été ajoutées à matplotlib.pyplot
•
boxplotFR() a été remplacée par
boxplot(boxplot_type="fr")
•
turtle.pensize() a été corrigée
• Malheureusement,
arrow() a été ralentie et très alourdie pour pas grand-chose
Téléchargement et installation des nouveaux OS :
sur le site de Casio Éducation
Téléchargement des scripts Python (pour lecture sur ordinateur) :
Libs Python Graph 35+E II et Graph 90+E
Article connexe sur TI-Planet :
Maj Graph 90/35+E II 3.50/3.40: Python turtle + matplotlib
À bientôt sur Planète Casio !
Citer : Posté le 19/10/2020 14:08 | #
Merci bien, et superbes nouveautés en effet.
J'ai également référencé l'article sur l'autre planète :
https://tiplanet.org/forum/viewtopic.php?p=256824#p256824
Citer : Posté le 19/10/2020 16:50 | #
Merci Critor ! J'ai lié l'article TI-Planet.
Les nouveaux OS sont accessible dans la section Logiciels du site.
• Mise à jour Graph 35+E II 3.40
• Mise à jour Graph 90+E 3.50
Citer : Posté le 20/10/2020 09:13 | #
Quelqu'un a mis à jour une 95 ou une 85 SD ? Est-ce qu'on perd le modifs d'affichage d'exctinction et du menu, ou cela ne met à jour que l'apps Python ?
Quand j'ai fait la mise à jour de la 90+E, mes programmes et mes APPS n'ont pas bougés. J'espère que l'écran d'extinction de ma 95 et de ma 85SD en feront de même.
Citer : Posté le 20/10/2020 10:03 | #
Les Graph 85 et 95 SD ne supportent pas Python et n'ont pas été mises à jour. La mise à jour dont Critor parle (2.11) concerne des modes examens internationaux, c'est relativement indépendant de la modification des modules Python.
Du reste, la mise à jour préserve normalement la mémoire principale et la mémoire de stockage, mais pas l'écran d'extinction.
Citer : Posté le 20/10/2020 10:45 | #
@Fabcvlr Pas de mise à jour pour les Graph 75/95.
Le logiciel de mise à jour 2.11 t'installera dans ce cas les anciennes versions 2.08 si c'est du SH3, ou 2.09 si c'est du SH4.
La version 2.11 ne sera installée que sur les modèles internationaux fx-9750/9860GII.
Elle n'ajoute pas le Python, juste un 2ème mode examen.
Ajouté le 29/10/2020 à 18:38 :
Petite remarque. Le fonctionnement de turtle.pensize(n) chez Casio ne semble pas conforme au standard turtle du Python.
En gros le paramètre est censé être l'épaisseur du trait de tracé en pixels.
Testons avec le code universel ci-dessous pour des valeurs de 0 à 7 :
from ce_turtl import *
turtle.clear()
except ImportError:
import turtle
def try_write(s):
try:
turtle.write(s)
except:
pass
def try_pensize(s):
try: turtle.pensize(s)
except: pass
def test(w, n):
turtle.penup()
turtle.goto(- w / 2, 0)
turtle.pendown()
for k in range(n):
try_pensize(k)
try_write(str(k))
turtle.forward(w / n)
#test(384, 8) # Graph 90+E
#test(128, 8) # Graph 35+E II
test(320, 8)
try: turtle.show() #TI-83 Premium CE
except: pass
Voici ce que ça donne sur ordi, pour référence :
Petit écart sur NumWorks :
Et maintenant sur Graph 90+E / 35+E II :
Mais ne vous inquiétez pas, il y a bien pire sur TI-83 Premium CE Edition Python / 84 Plus CE-T Python Edition :
Petit bilan comparatif en fonction des valeurs du paramètre :
0 1 ✓ 1 ✓ 0 ✗ 1 ✓
1 1 ✓ 1 ✓ 1 ✓ 3 ✗
2 2 ✓ 3 ✗ 2 ✓ 5 ✗
3 3 ✓ 3 ✓ 3 ✓ 7 ✗
4 4 ✓ 5 ✗ 4 ✓ 7 ✗
5 5 ✓ 5 ✓ 5 ✓ 7 ✗
6 6 ✓ 5 ✗ 6 ✓ 7 ✗
7 7 ✓ 5 ✗ 7 ✓ 7 ✓
Score 100% 50% 87,5% 25%
Citer : Posté le 20/08/2022 05:27 | #
Maybe only for some countries? Or maybe Casio removed it? My fx-9750GIII (USA) does not seem to have matplotlib or turtle:
“They call me the king of the spreadsheets, got 'em all printed out on my bedsheets.” — “Weird Al” Yankovic
Citer : Posté le 20/08/2022 09:41 | #
Indeed, the american fx-9750GIII and european fx-9860GIII don't have the builtin matplotlib, only the french Graph 90+E has.
But you can easily add it, since it's just a Python script using casioplot.
Here is the latest version extracted from the 3.50 Graph 90+E update :
https://tiplanet.org/forum/archives_voir.php?id=2648498