Pour cette rentrée 2020, Texas Instruments rajoute à sa TI-83 Premium CE Edition Python la possibilité d'interagir avec les cartes BBC micro:bit, qui plus est en Python !
Ce mercredi 16 septembre de 18h30 à 20h, Texas Instruments en la personne de Jean-Louis Balas, formateur T3, se propose de t'accompagner dans la prise en main de cette solution.
Au menu de cette première édition :
installation des modules Python nécessaires pour la compatibilité BBC micro:bit, mais que tu peux déjà effectuer à partir des liens ci-après
prise en main à travers divers exemples de scripts Python faisant appel à des éléments intégrés de la carte BBC micro:bit
Cette année comme chaque année Casio t'a conçu de tous nouveaux goodies. Voici donc ci-contre une des dernières créations du constructeur, une batterie USB externe estampillée à son nom.
Un goodies exceptionnel qui pour une fois n'ira pas ramasser la poussière sur ton étagère ou dormir au fond de ton tiroir mais saura se rendre utile, et qui plus est pourra être utilisé directement avec ta calculatrice ! Et puis ce serait toute une fierté d'adjoindre ça à ta Casio, non ?
Il s'agit en fait de la Power Bank Endurance, un objet publicitaire personnalisable distribué en Europe par Inspirion.
La batterie offre une capacité de 2200 mAh.
Nous disposons donc d'un port USB micro-B pour la recharge, ainsi que d'un port USB A pour alimenter ta calculatrice ou tout autre appareil compatible.
Une fois chargée et connectée au port USB de ta calculatrice, la batterie externe te permet selon les modèles :
d'alimenter ta calculatrice et donc de prolonger la durée de vie de ses piles ou de sa batterie interne
de recharger la batterie interne de ta calculatrice
Avec la Graph 35+E II et autres calculatrices Casio Graph monochromes c'est particulièrement impressionnant, puisque la calculatrice accepte parfaitement de s'allumer et continuer à fonctionner correctement alimentée par la seule batterie externe, piles internes retirées donc ! Tu pourras donc même continuer à utiliser ta calculatrice une fois les piles complètement déchargées !
Attention toutefois, piqûre de rappel, en tant que module externe cette batterie USB est strictement interdite d'utilisation aux examens en France.
La batterie externe USB Casio n'étant pas sectaire, voici d'autres modèles qui s'accomodent parfaitement de cette seule alimentation externe :
TI-Nspire CX
HP Prime
Les modèles Casio couleur Graph 90+E et fx-CP400+E quant à eux n'acceptent pas de fonctionner en l'absence de l'alimentation interne par piles. Malgré l'alimentation externe, la calculatrice s'allume puis s'éteint immédiatement. Soit l'alimentation externe est insuffisante ce qui serait quand même surprenant vu les deux derniers modèles testés, soit ces modèles sont tout simplement plus stricts dans leurs vérifications de l'alimentation interne.
Le reste des modèles testés refuse catégoriquement de s'allumer lorsque alimentés uniquement en externe via leur port USB :
TI-83 Premium CE
TI-82 Advanced
NumWorks
TI-Nspire monochromes
Avec le nombre d'événements annulés cette année, tu risques ne ne pas avoir beaucoup d'occasions de récupérer ce goodies d'exception...
Et bien réjouis-toi car nous allons t'en faire gagner très prochainement tout un stock à notre concours de rentrée ; il y en aura pour récompenser tous les gagnants optant pour un lot Casio !
Les logiciels TI-SmartView de Texas Intruments sont des outils de haute qualité, permettant de reproduire sur ton ordinateur le fonctionnement de ta calculatrice.
Ils sont très fidèles comme en témoigne l'édition TI-83 Premium CE ; tout y marche :
programmes TI-Basic
scripts Python
applications
programmes assembleur
Un très bel outil notamment pour l'enseignant avec l'a possibilité de prendre des captures d'écran pour composer ses documents. Egalement taillé sur-mesure pour une vidéoprojection permettant de mutualiser l'usage de la calculatrice en classe, avec notamment :
l'historique des touches pressées
le clavier montrant la position de la dernière touche pressée
Hélas gros handicap pour cette rentrée 2020, l'édition TI-83 Premium CE du logiciel TI-SmartView n'est toujours pas à jour. Restant en version 5.4, elle ne permet donc pas de traiter des formidables nouveautés Python apportées à partir de la mise à jour 5.5.
Et impossible de mettre à jour l'émulateur avec les mêmes fichiers que la calculatrice, les transferts en ce sens sont tout simplement refusés, y compris celui de la dernière application Python 5.5.2 !
En attendant qu'une mise à jour soit enfin disponible pour l'édition TI-83 Premium CE du logiciel TI-SmartView, nous te livrons une petite astuce pour te dépanner dans les prochaines semaines.
Il te suffit tout simplement d'utiliser la nouvelle édition TI-84 Plus CE-T du logiciel TI-SmartView qui vient tout juste de sortir.
Cette édition n'émule pas le modèle français TI-83 Premium CE Edition Python mais le nouveau modèle européen TI-84 Plus CE-T Python Edition ici parfaitement à jour avec la dernière application Python 5.5.2 et le dernier système 5.6 !
Les interfaces et menus y sont identiques, et tu pourras les passer en français à l'aide de la touche
mode
.
Attention cette astuce ne sera valable que pour le 1er trimestre, Texas Instruments n'autorisant que 90 jours d'utilisation gratuite à compter du 1er lancement.
Espérons donc qu'une autre solution sortira d'ici-là.
Téléchargement :TI-SmartView édition TI-84 Plus CE-T pour Windows / Mac
La TI-84 Plus CE, le modèle remplaçant notre TI-83 Premium CE française chez nos voisins européens et dans le monde, est à la différence disponible dans de nombreux coloris.
En France cela avait déjà été proposé du temps des TI-83 Plus et TI-84 Plus monochromes, et il faut croire que cela n'a pas rencontré de succès bien extraordinaire. Nombre de familles voient en effet encore la calculatrice graphique de Seconde comme un achat contraint et non comme un achat plaisir ou outil d'accompagnement vers la réussite, et opteront donc de toutes façons pour le modèle classique/standard légèrement moins cher si on leur laissait le choix.
Pour le lancement à la rentrée 2015, nous avions eu droit à pas moins de 8 éditions différentes :
Classic(noir)
Denim(bleu marin)
Lightning(bleu é-clair)
Plum Pi(pi-zza aux prunes)
Positively Pink(rose positif)
Radical Red(rouge radical)
Silver Linings(double argent)
True Blue(bleu réel)
Les anglophones noteront quelques jeux de mots intéressants dans le contexte des mathématiques, pas toujours aisés à retranscrire en français.
Pour la rentrée 2016, 2 nouveautés ont permis de passer à un éventail de 10 coloris différents :
Bright White(blanc brillant)
Golden Ratio(proportion dorée - brillant ; du nombre d'or ou divine proportion)
La rentrée 2017 marque un gros changement. Texas Instruments ne reconduit que 5 des anciens coloris, mais sort 4 nouveautés pour un arc-en-ciel de 9 coloris différents :
Bionic Blue(bleu bionique)
Count on Coral(compte sur corail)
Galaxy Gray(gris galactique - brillant)
Measure Mint(menthe mesuré)
Pour la rentrée 2018 le constructeur reconduit 8 des anciens coloris, mais sort 1 nouveauté qui nous permet donc de rester sur un total de 9 coloris différents :
Rose Curve Gold(rose or - brillant)
Pour la rentrée 2019, Texas Instruments reconduit 9 anciens coloris et sort 2 nouveautés, pour un éventail de 11 coloris différents :
Matte-matic Black (noir mat-hématique)
Tangent Teal (sarcelle tangent)
Courant 2020, quelques exemplaires de TI-84 Plus CE dans des coloris encore jamais vus sont apparus à la revente en loose sur eBay.
Pas de numéro de série gravé au dos mais par contre une mention NOT FOR SALE que le vendeur s'est empressé d'ignorer, il s'agissait donc de prototypes, et plus précisément de prototypes de nouveaux coloris conçus pour la rentrée 2020.
2 coloris saumon différant de par la face arrière noire ou blanche :
Un nouveau coloris rouge.
Deux variantes du Tangent Teal avec cette fois-ci une nuance au niveau du cadre écran, et différant de par le couvercle plus ou moins foncé :
Et enfin un étrange coloris tricolore avec du bleu pour le clavier, du blanc pour le cadre écran, et du vert pour le couvercle.
Mais nous ignorions lesquels de ces coloris seraient effectivement proposés à la rentrée 2020, il est bien évident que les concepteurs de TI font plusieurs propositions en interne chaque année. Et nous ignorions de plus leurs noms.
Rentrée 2020 donc, ce sont ces 2 derniers coloris que Texas Instruments a finalement retenus et nous rajoute sous les noms suivants :
Totally Teal(totalement sarcelle - brillant)
Trifecta(trissectrice)
Reconduisant de plus 8 anciens coloris, Texas Instruments nous offre donc cette rentrée 10 coloris différents.
Classic Denim Lightning Plum Pi Positively Pink Radical Red Silver Linings True Blue Bright White Golden Ratio Bionic Blue Count on Coral Galaxy Grey Measure Mint Rose Curve Gold Matte-matic Black Tangent Teal Totally Teal Trifecta TOTAL
2015 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
8
2016 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
10
2017 ✓
✓ ✓
✓ ✓ ✓ ✓ ✓ ✓
9
2018 ✓
✓ ✓
✓
✓ ✓ ✓ ✓ ✓
9
2019 ✓
✓ ✓
✓ ✓ ✓
✓ ✓ ✓ ✓ ✓
11
2020 ✓
✓
✓ ✓ ✓
✓ ✓ ✓
✓ ✓ 10
Et toi, quelle est ta TI-84 Plus CE préférée ? Viens le dire en commentaire ! Et si tu hésites, TI se propose même ci-dessous de t'aider à calculer ta couleur préférée.
Texas Instruments nous sort enfin aujourd'hui sa tant attendue mise à jour de rentrée TI-Nspire CX II, la version 5.2.
Il s'agit plus précisément d'une version 5.2.0.771 compilée le 15 août 2020 à 4h52.
Cette mise à jour apporte une grande nouveauté, une application Python, que nous allons nous empresser de découvrir avec toi, et qui reste entièrement accessible en mode examen.
Sur TI-Nspire CX II, le Python n'est pas une application ayant l'honneur d'être directement disponible à l'écran d'accueil de la calculatrice. Il te faut créér un document et ensuite le Python sera listé en tant que 10ème type d'application rajoutable sur chaque page. L'application peut de plus être rajoutée sous deux formes différentes dont on nous propose le choix :
éditeur de script (nouveau ou ouvrir)
console (shell)
Commençons donc par l'éditeur avec un nouveau script. Afin de pouvoir démarrer très vite dans nombre de situations au lycée, Texas Instruments t'a conçu sur-mesure pas moins de 9 modèles de scripts prédéfinis :
# Hub Project #================================ from ti_hub import * from math import * from time import sleep from ti_plotlib import text_at,cls from ti_system import get_key #================================
# Rover Coding #================================ import ti_rover as rv from math import * import ti_plotlib as plt from ti_system import * from time import * #================================
Nous accédons donc à un très bel éditeur. Notons en passant que TI a même pensé à nous rajouter une petite icône Python dans l'interface en question, histoire qu'on ne la confonde avec celle de l'éditeur de programmes.
Il bénéficie de la coloration syntaxique, de l'indentation automatique, peut afficher simultanément jusqu'à 11 lignes, et le numéro de la ligne courante étant reporté en haut à droite, fort utile pour corriger les éventuelles erreurs d'exécution.
Un éditeur très complet, on peut y réaliser des sélections en maintenant enfoncée la touche
shift
comme sur ordinateur, couper-copier-coller-effacer la sélection courante à l'aide des racourcis
ctrl
X
,
ctrl
C
,
ctrl
V
et
del
. La touche
menu
donnera accès à d'autres fonctionnalités tout en en rappelant les raccourcis clavier : aller en début/fin de ligne, en début/fin de script, aller à un numéro de ligne, rechercher, remplacer.
Gros avantage par rapport à la concurrence, on y trouve également un vérificateur syntaxique qui te permettra de gagner du temps en anticipant nombre d'erreurs qui t'auraient embêté(e) à l'exécution. En prime contrairement aux erreurs d'exécution dans la console Python qui habituellement n'indiquent qu'un numéro de ligne, la vérification syntaxique depuis l'éditeur t'amènera directement sur la ou les lignes à corriger !
2) 1er script et console - nombres flottants et complexes :
Bon, maintenant que nous savons utiliser l'éditeur, tentons de premiers tests simples histoire de se mettre en jambe. Etudions un petit peu le moteur de calcul numérique du Python en question.
Commençons par les nombres en virgule flottante dits flottants. Ce type de donnée utile pour les nombres non entiers sous la forme
$mathjax$M\times 2^{E-E_{min}}$mathjax$
, avec :
M, un nombre entier relatif dit mantisse
Emin, nombre entier négatif indique l'exposant minimal pouvant être codé
E, nombre entier naturel codant l'exposant
Voici donc nos toutes premières fonctions Python sur TI-Nspire CX II :
def precm(b): k,b=0,float(b) while 1+b**-k-1>0: k+=1 return k
def prece(): a=-1 while 2.**a>0: a*=2 while 2.**a==0: a+=1 b=1 while str(2.**b)[0:3]!='inf': b*=2 while str(2.**b)[0:3]=='inf': b-=1 return [a,b]
Pour exécuter tout ça on peut certes recommencer comme plus haut et insérer une application Python cette fois-ci format console (shell) sur une nouvelle page, console dans laquelle il faudra donc importer manuellement notre script.
Mais on peut également utiliser la touche
menu
pour demander directement l'exécution du script depuis l'éditeur, auquel cas ce dernier sera importé automatiquement.
Notons la touche
var
qui te permet de lister et saisir rapidement les noms de fonctions et variables globales définies dans le script.
L'appel precm(2) nous répond que le moteur travaille en virgule flottante avec des mantisses dont la précision est codée sur 53 bits, permettant environ 16 chiffres significatifs en écriture décimale (precm(10)), et auxquels il faut bien évidemment rajouter 1 bit de signe. L'appel prece() nous indique pour sa part que les valeurs codables pour les exposants dans la formule vont de -1075 à +1023. Il s'agit du standard double précison du Python, un excellent choix pour le contexte scientifique du lycée, et à ce jour toutes les calculatrices concurrentes disposant d'une véritable implémentation Python répondent la même chose.
Notons au passage avec la saisie 1j la gestion des nombres complexes dits imaginaires (Option Maths Expertes + série STI2D).
Tentons maintenant de réaliser ensemble une première esquisse de l'étendue de la solution PythonTI-Nspire CX II, avec l'éventail de modules disponibles.
Pour explorer, nous allons commencer par aller dans la console, ici encore flanquée du logo Python histoire qu'on ne le confonde pas avec l'application calculs.
La touche
menu
nous donne alors un accès très rapide à une sélection de différentes fonctions Python classées par catégories correspondant justement à des modules.
Outre le module builtins(intégrés), nous notons donc la disponibilité des modules :
math
random pour les fonctions aléatoires
ti_plotlib, module de tracé par coordonnées
ti_hub pour les projets d'objets connectés avec l'interface TI-Innovator Hub
ti_rover pour les projets de robotique avec le robot TI-Innovator Rover
Une sélection complémentaire de modules est également accessible via un sous-menu :
cmath pour les fonctions relatives aux nombres imaginaires/complexes (Option Maths Expertes + série STI2D)
time
ti_system
ti_draw, module de tracé par pixels
ti_image, autre module de tracé par pixels
Mais nous savons par expérience que tous les modules disponibles ne sont pas forcément au menu. Tentons donc d'en demander une liste via la fonction help(), et plus précisément help('modules').
Nous obtenons alors une liste qui n'est pas complète, reprenant certains des modules précédents mais pas tous. Par contre, elle nous en annonce d'autres que voici :
array
binascii
collections
ctypes
errno
gc
hashlib
heapq
micropython
re
sys
ti_picture
ti_st
Commençons par traiter les modules Python standard. Nous indiquerons en rouge les modules qui ne sont utilisables qu'hors examen.
La solution Python de la TI-Nspire CX II semble être excellente niveau standard avec pas moins de 16 modules, de loin la meilleure sélection officielle sur ce critère, aussi bien en examen qu'en classe !
Il ne nous semble pas pertinent de baser un classement comparatif sur les modules propriétaires, un unique module sur un modèle haut de gamme pouvant apparemment être éclaté en plein de petits modules différents sur un modèle disposant de moins de mémoire. Il faudrait en fait regarder le contenu, ce que nous ferons plus loin. En attendant, voici donc un classement donnant la priorité aux modules standard :
16 modules standard + 9 modules propriétaires : TI-Nspire CX II
9 modules standard + 2 modules propriétaires : NumWorks
8 modules standard + 34 modules propriétaires : TI-83 Premium CE Edition Python
8 modules standard + 1 module propriétaire : HP Prime(version alpha)
3 modules standard + 1 module propriétaire : Casio Graph 90+E / 35+E II
Exclusivité de la solution PythonTI-Nspire CX II à ce jour, nous y disposons d'un formidable assistant d'aide à la saisie, à un niveau jusqu'à présent jamais vu.
L'assistant est fonctionnel aussi bien dans l'éditeur que dans la console, dans le contexte des saisies effectuées via un menu.
Par exemple ci-contre avec l'insertion via le menu de blocs d'instructions if et for.
Les différents éléments que tu te dois de compléter dans la saisie te sont notés en gris clair, avec même une inscription indicative. C'est un peu comme un texte à trous.
Si ton curseur se trouve dans l'une des zones en question son affichage passe en inversé. Pas besoin non plus de t'acharner sur les touches fléchées pour aller rejoindre les différents bouts à compléter, tu peux passer instantanément au prochain élément à compléter à l'aide de la touche
tab
!
Cette formidable assistance à la saisie marche de façon similaire avec les paramètres d'appels de fonction insérés via les menus !
D'ailleurs sur certaines fonctions, l'activation d'un des paramètres à compléter pourra même t'afficher des explications ou indications complémentaires sur la saisie attendue !
Sur d'autres paramètres ne pouvant prendre qu'un nombre fini de valeurs, l'activation de leur zone de saisie affichera automatiquement un menu contextuel à partir duquel tu pourras saisir instantanément l'une des valeurs autorisées !
Dans le cas où les valeurs autorisées sont trop nombreuses, tu pourras à la place obtenir ici encore une indication fort utile sous forme d'info bulle.
Enfin, précisons que la saisie d'un point à la suite d'un objet de type prédéfini proposant des méthodes ou sous objets, pourra t'afficher automatiquement un menu contextuel avec les choix en question, et que tu bénéficieras encore dans ce contexte de toutes les fonctionnalités de l'assistant !
Cet assistant d'aide à la saisie TI-Nspire CX II est véritablement exceptionnel et va te permettre d'être encore plus efficace et autonome, minimisant les besoins d'aller recourir à une quelconque documentation !
Les interpréteurs MicroPython ou similaires qui tournent sur calculatrices font appel à différents types de mémoires. La pile (stack) référence, à l'exécution, les objets Python créés. Sa capacité limite donc le nombre d'objets Python pouvant coexister simultanément en mémoire.
Tentons donc de déclencher une consommation massive de stack, afin de pouvoir comparer et voir comment s'en sortent la TI-Nspire CX II et les autres. Une situation très simple qui peut être grand consommatrice de stack c'est la récursivité, soit les fonctions qui se rappellent elles-mêmes. Prenons le script suivant, issu du QCC 2020 :
def test(f): n = 0 try: while 1: n = f(n) + 1 except Exception as e: print(e) return n
Nous atteignons donc sur TI-Nspire CX II un maximum de 202 niveaux de récursion avant erreur. C'est extraordinaire, à la fois le record de toutes les solutions officielles, et le record de toutes les solutions compatibles avec une utilisation mode examen !
D'où le classement des solutions Python niveau stack :
Les interpréteurs MicroPython ou similaires qui tournent sur calculatrices font appel à différents types de mémoires. Le tas (heap) stocke, à l'exécution, le contenu des objets Python créés. Il limite donc la taille globale utilisée pour les données de ces différents objets.
Nous avons justement la chance ici de disposer du module gc, avec plusieurs fonctions bien utiles :
gc.collect() pour nettoyer le heap en supprimant les valeurs d'objets Python qui ne sont plus référencées
gc.mem_alloc() pour connaître la consommation du heap en octets
gc.mem_free() pour connaître l'espace heap disponible en octets
Appelons donc le petit script suivant afin d'enfin découvrir la tant attendue taille de heapPythonTI-Nspire CX II :
import gc a, f = mem_alloc(), mem_free() (a, f, a + g)
Nous disposons donc ici d'un heap d'une capacité impressionnante, la plus grand actuellement parmi toutes les solutions concurrentes officielles, 2,073 Mo, de quoi a priori te lancer dans des projets Python très ambitieux ! Plus précisément nous avons ici 2,072 Mo de libres, mais auxquels il faut ajouter la taille consommée par l'importation du module gc.
Toutefois, toutes les calculatrices Python ne disposent pas du module gc. Afin de pouvoir faire des comparaisons équitables, nous allons construire notre propre script de test d'estimation de la capacité heap à partir des informations suivantes sur les tailles des objets Python, du moins sur les plateformes 32 bits que sont à ce jour nos calculatrices :
pour un entier nul : 24 octets déjà...
pour un entier court non nul (codable sur 31 bits + 1 bit de signe) : 28 octets
pour un entier long :
28 octets
+ 4 octets pour chaque groupe de 30 bits utilisé par son écriture binaire au-delà des 31 bits précédents
pour une chaîne :
49 octets
+ 1 octet par caractère
pour une liste :
64 octets
+ 8 octets par élément
+ les tailles de chaque élément
Nous allons donc tenter de remplir le heap avec plusieurs objets que nous allons faire grandir chacun son tour jusqu'à déclenchement d'une erreur, et retourner la capacité maximale que nous avons réussi à consommer. Nous récupérerons de plus la plus grand taille d'objet que nous avons réussi à utiliser lors de ce test, on t'explique de suite.
def size(o): t = type(o) s = t == str and 49 + len(o) if t == int: s = 24 while o: s += 4 o >>= 30 elif t == list: s = 64 + 8*len(o) for so in o: s += size(so) return s
def testmem(): m1, m2 = 0, 0 while 1: t1, t2 = mem(0) if t1 > m1 or t2 > m2: m1 = max(t1, m1) m2 = max(t2, m2) input(str((m1,m2)))
On trouve bien sur TI-Nspire CX II une capacité heap de 2,067 Mo proche de la mesure précédente, à laquelle bien sûr il faut rajouter la consommation du script que nous estimons à 1,056 Ko. Nous avons ici en prime une autre valeur de 683,256 Ko, correspondant à la taille du plus gros objet qui a pu être créé au cours du test et donc au plus grand espace libre disponible de façon contiguë dans le heap.
D'où le classement des solutions Python niveau heap :
2,068 Mo(33,36% contigu) : TI-Nspire CX II
1,033 Mo(38,18% contigu) : Casio Graph 90+E
1,014 Mo(38,91% contigu) : HP Prime(version alpha)
101,262 Ko(41,74% contigu) : Casio Graph 35+E II
33,545 Ko(40,58% contigu) : NumWorks
18,354 Ko(40,70% contigu) : TI-83 Premium CE Edition Python
2,068 Mo(33,36% contigu) : TI-Nspire CX II
1,033 Mo(38,18% contigu) : Casio Graph 90+E
1,014 Mo(38,91% contigu) : HP Prime(version alpha)
Un module très intéressant à explorer pour découvrir des choses, c'est le module standard sys. Il n'est certes pas au menu, mais on peut quand même obtenir la liste des différents éléments qu'il permet d'appeler via un simple dir(sys).
sys.platform == 'TI-Nspire' sera par exemple une astuce de test bien utile pour tes scripts en ayant besoin d'identifier la plateforme sur laquelle ils tournent.
Comme on pouvait s'en douter sys.implementation nous confirme que nous sommes sur un Micropython, en précisant qu'il s'agit d'une version 1.11.0, et implémentant lui-même le Python 3.4.0 comme l'indique sys.version.
sys.maxsize pour sa part indique le plus grand entier pouvant être codé nativement sur la plateforme utilisée, avec ici une organisation little endian comme l'indique sys.byteorder. sys.maxsize détermine la taille maximale de nombre de structures telles les listes. Les variables peuvent quand même prendre des valeurs entières supérieures qui sont alors gérées logiciellement en tant qu'entiers longs.
Sur toute la concurrence nous avions jusqu'à présent sys.maxsize == 2**31 -1, valeur habituelle pour les plateformes 32 bits, 1 bit étant réservé pour le signe.
Ici, on a bizarrement 2**63-1 sur le logiciel ordinateur et 32767 sur calculatrice, ce qui n'est pourtant clairement pas le maximum
8) Module ti_system - intégration, clavier et souris :
Tentons maintenant d'en apprendre davantage sur la valeur ajoutée apportée par Texas Instruments à la solution Python de la TI-Nspire CX II. Nous allons pour cela explorer les modules propriétaires ; commençons par regarder du côté du module système de Texas Instruments, le ti_system, et nous évoquerons le module du même nom sur TI-83 Premium CE Edition Python.
Chez la concurrence à ce jour, l'application Python a le défaut de tourner en vase clos dans son coin. Elle ne permet pas de partager des données avec le reste des applications de la calculatrice, et ne s'intègre donc pas naturellement dans la démarche de résolution d'un problème.
Texas Instruments avait déjà proposé un début d'intégration du Python à l'environnement mathématique de la calculatrice avec le module de la TI-83 Premium CE Edition Python. Au menu la possibilité de faire rentrer et sortir des données de l'application Python :
importation dans l'application Python de variables de type liste existant dans l'environnement de la calculatrice
exportation depuis l'application Python de variables de type liste vers l'environnement de la calculatrice
Listes de nombres réels uniquement, les nombres complexes étant exclus. Les mêmes données devenaient ainsi traitables sous différentes applications pour une bien meilleure recherche et résolution de problème, faisant intervenir diverses représentations et compétences.
Une fonctionnalité toujours exclusive à Texas Instruments à ce jour et que nous avons le grand plaisir de retrouver ici avec les fonctions store_list() et recall_list().
Texas Instruments en profite même pour étendre la chose. store_value() et recall_value() te permettront la même chose mais cette fois-ci avec des variables numériques (réelles).
Texas Instruments va même beaucoup plus loin que ça avec eval_function(). Cette fonction permet à tes scripts Python de faire appel à une fonction définie dans ton classeur courant, fonctions à une variable uniquement mais c'est déjà un très bon début !
Autre bonne nouvelle, nous avons de quoi tester la pression sur les touches clavier. Non pas une fonction wait_key() blocante ne permettant pas de coder autre chose que des menus et jeux tour par tour comme sur TI-83 Premium CE, mais un véritable get_key() non blocant qui te donnera une totale liberté pour tes projets d'interfaces et jeux ! La fonction get_key() renvoie une chaîne de caractères, identifiant la touche ou combinaison de touches pressée, et en voici une petite carte afin de t'y retrouver :
esc
up
home
scratchpad
left
center
right
doc
tab
down
menu
var
del
=
trig
7
8
9
template
cat
^
square
4
5
6
*
/
exp
10power
1
2
3
+
-
(
)
0
.
−
enter
E
A/a
B/b
C/c
D/d
E/e
F/f
G/g
?!
pi
H/h
I/i
J/j
K/k
L/l
M/m
N/n
,
O/o
P/p
Q/q
R/r
S/s
T/t
U/u
return
V/v
W/w
X/x
Y/y
Z/z
/_
Enfin tu vas ici pouvoir donner une toute nouvelle dimension à tes projets d'interfaces en Python, car tu disposes même d'une fonction get_mouse() pour tester la position du pointeur souris !
ti_draw est donc le module de tracé par pixels de la TI-Nspire CX II. Avec un nom différant du ti_graphics de la TI-83 Premium CE Edition Python nous ne nous attendons certes pas à de la compatibilité, mais également pas au même fonctionnement.
Déjà à la différence de ce dernier, nous notons ici la possibilité d'utiliser du double-buffering.
get_screen_dim() nous apprend que la zone graphique que l'on contrôle fait 318×212 pixels, comme pour les scripts Lua supportés depuis la version 3.0. A la différence près que pour les scripts Lua la zone graphique était liée aux dimensions de l'application concernée. Ici cela semble être indépendant. L'affichage graphique ne semble pas être redimensionnable et se fait toujours sur une fenêtre popup plein écran offrant donc 318×212 pixels.
set_pen("épaisseur", "style") permet de régler la plume du stylo. La fonction accepte les paramètres listés ci-contre par l'assistant de saisie, mais également des numéros selon les équivalences suivantes :
0 = thin
1 = medium
2 = thick
0 = solid
1 = dotted
2 = dashed
Nous allons t'illustrer de suite ce que les différentes combinaisons de réglages signifient :
nta, nty = 3, 3 lx = [xmin + k*(xmax-xmin)/(2*nta+1) for k in range(1, 2*nta+1)] ly = [ymin + k*(ymax-ymin)/(2*nty+1) for k in range(1, 2*nty+1)] l = (xmax-xmin+1) / (2*nta+1)
for i in range(nty): scr.draw_text(xmin-tw, ly[i*2], str(i)) for j in range(nta): scr.draw_text(lx[j*2], ymin+th, str(j)) scr.set_pen(j, i) scr.draw_line(lx[j*2], ly[i*2], lx[j*2 + 1], ly[i*2])
Nous notons donc diverses fonctions de tracé de primitives :
draw_line(x1, y1, x2, y2) : segment
draw_rect(x, y, largeur, hauteur) : rectangle
fill_rect(x, y, largeur, hauteur) : rectangle plein
draw_circle(x, y, rayon) : cercle
draw_arc(x, y, largeur, hauteur, angle_initial, angle_de_l_arc) : arc d'ellipse
fill_arc(x, y, largeur, hauteur, angle_initial, angle_de_l_arc) : secteur d'ellipse
draw_poly(x_liste, y_liste) : polygone
fill_poly(x_liste, y_liste) : polygone plein
plot_xy(x, y, figure)
draw_text(x, y, ...)
La fonction draw_poly() permet donc de tracer une ligne brisée. La fonction fill_poly() permet quant à elle de colorier le polygone obtenu en fermant cette ligne brisée.
nta, nty = 3, 3 lx = [xmin + k*(xmax-xmin)/(2*nta+1) for k in range(1, 2*nta+1)] ly = [ymin + k*(ymax-ymin)/(2*nty+1) for k in range(1, 2*nty+1)] l = (xmax-xmin+1) / (2*nta+1)
for i in range(nty): scr.draw_text(xmin-tw, ly[i*2], str(i)) for j in range(nta): scr.draw_text(lx[j*2], ymin+th, str(j)) scr.set_pen(j, i) scr.set_color((255,0,0)) scr.fill_poly([lx[j*2], lx[j*2 + 1], lx[j * 2], lx[j*2 + 1]], [ly[i*2], ly[i*2], ly[i*2+1], ly[i*2+1]]) scr.set_color((0,0,0)) scr.draw_poly([lx[j*2], lx[j*2 + 1], lx[j * 2], lx[j*2 + 1]], [ly[i*2], ly[i*2], ly[i*2+1], ly[i*2+1]])
drawRect(x, y, w, h) permet donc de tracer un rectangle :
de dimensions w et h données en pixels
aux côtés parallèles aux bords de l'écran
et en utilisant le point de coordonnées (x, y) comme sommet supérieur gauche
La fonction fillRect() quant à elle permet de colorier le rectangle en question.
nta, nty = 3, 3 lx = [xmin + k*(xmax-xmin)/(2*nta+1) for k in range(1, 2*nta+1)] ly = [ymin + k*(ymax-ymin)/(2*nty+1) for k in range(1, 2*nty+1)] l = (xmax-xmin+1) / (2*nta+1)
for i in range(nty): scr.draw_text(xmin-tw, ly[i*2], str(i)) for j in range(nta): scr.draw_text(lx[j*2], ymin+th, str(j)) scr.set_pen(j, i) scr.set_color((255,0,0)) scr.fill_rect(lx[j*2], ly[i*2], lx[j*2+1]-lx[j*2], ly[i*2+1]-ly[i*2]) scr.set_color((0,0,0)) scr.draw_rect(lx[j*2], ly[i*2], lx[j*2+1]-lx[j*2], ly[i*2+1]-ly[i*2])
Voici maintenant du lourd avec drawArc(x, y, w, h, t1, t2) et fillArc(x, y, w, h, t1, t2) :
nta, nty = 3, 3 lx = [xmin + k*(xmax-xmin)/(2*nta+1) for k in range(1, 2*nta+1)] ly = [ymin + k*(ymax-ymin)/(2*nty+1) for k in range(1, 2*nty+1)] l = (xmax-xmin+1) / (2*nta+1)
for i in range(nty): scr.draw_text(xmin-tw, ly[i*2], str(i)) for j in range(nta): scr.draw_text(lx[j*2], ymin+th, str(j)) scr.set_pen(j, i) scr.set_color((255,0,0)) scr.fill_arc(lx[j*2], ly[i*2], lx[j*2+1]-lx[j*2], ly[i*2+1]-ly[i*2], 0, 315) scr.set_color((0,0,0)) scr.draw_arc(lx[j*2], ly[i*2], lx[j*2+1]-lx[j*2], ly[i*2+1]-ly[i*2], 0, 315)
La fonction drawArc(x, y, dx, dy, t1, t2) permet donc de tracer un arc d'une ellipse elle-même inscrite dans un rectangle :
de dimensions w et h données en pixels
aux côtés parallèles aux bords de l'écran
et en utilisant le point de coordonnées (x, y) comme sommet supérieur gauche
t1 et t2 sont les angles au centre orientés délimitant l'arc en question, exprimés en degrés.
Et la fonction fillArc() permet quant à elle de colorier le secteur d'ellipse obtenu par balayage de l'arc en question.
draw_text(x, y, 'texte') écrit bien évidemment du texte en prenant les coordonnées spécifiées comme coin supérieur gauche :
320×210= 67200 pixels : TI-83 Premium CE Edition Python / TI-84 Plus CE-T Python Edition
128×64= 8192 pixels : Casio Graph 35+E II
Mais si donc nous venons de terminer avec une fonction permettant d'allumer un pixel, nous n'avons pas vu de trace de fonction permettant de tester l'état d'un pixel. C'est en fait que nous n'en avons pas terminé avec les modules de tracé par pixels...
ti_image est donc un module de tracé par pixels complémentaire du précédent, avec a priori pas beaucoup de fonctions.
Comme son nom l'indique, il permet de charger et afficher des images. Il s'agit ici d'images insérées en tant que ressources dans ton classeur, il te faudra pour cela utiliser le logiciel TI-Nspire et l'éditeur de script Lua.
L'objet image Python correspondant est ensuite créé d'un simple img = load_image(n), mais pas affiché.
En fait c'est l'objet image ainsi créé qui apporte les fonctions utiles, dont ici le img.show_image(x, y).
Une gestion des images qui a ici le gros avantage de ne nécessiter que 2 lignes de code en Python, de ne pas inclure les données des images dans ton script Python, et donc d'économiser grandement la consommation du heap !
Par contre, il n'y aurait pas comme un petit bug, non ?
Le module ti_image semble afficher les ressources images du classeur à l'envers... alors que l'image en question avait un aperçu correct dans l'éditeur montré précédemment, et que la même ressource est visiblement affichée correctement ci-contre par un script Lua.
Mais ti_image est très loin de ne servir qu'aux images...
En réalité il s'agit d'un module qui permet en fait de travailler en pixels sur des calques hors écran, autant de calques que tu veux. Un calque se crée dans la couleur que tu souhaites d'un simple layer = new_image(w, h, (r, g, b)), et tu disposes ensuite de méthodes set_pixel() et enfin get_pixel() pour faire tout ce que tu veux avec !
Très pratique ces deux dernières fonctions également pour faire du traitement d'image en SNT.
ti_picture est donc quant à lui un module de tracé par pixels secret, puisque n'étant pas au menu.
On peut l'interroger sur son contenu d'un dir(ti_picture).
Il semble bizarrement offrir quasiment les mêmes possibités que le module ti_image précédent...
A une petite différence près, c'est qu'ici les données des calques sont stockés sous le type standard bytearray au format RGB 24 bits.
Selon comment tu souhaites travailler sur tes calques et images (par pixels ou par octets), ainsi que le degré de compatibilité que tu souhaites te laisser avec d'autres plateformes, ti_picture pourra donc parfois être un meilleur choix que ti_image.
Plus haut nous avions donc évalué la richesse de la plateforme en nous basant sur le nombre de modules standard disponibles. Nous avions exclu les modules propriétaires du classement, car cela n'avait pas de sens : un gros module propriétaire sur TI-Nspire CX II se voit découpé en plein de petits modules propriétaires sur TI-83 Premium CE Edition Python.
Tentons une autre approche incluant cette fois-ci les modules propriétaires avec le script suivant, initialement conçu pour notre classement QCC 2020. Et comme nous n'avions justement pas traité ce point publiquement dans ce contexte, c'est maintenant l'occasion :
unsafe = () if pf == 4: #HP Prime unsafe = ('count','encode','endswith','find','format','index','islower','lstrip','replace','rfind','rindex','rsplit','rstrip','split','splitlines','startswith','strip','from_bytes','to_bytes','fromkeys','get','pop','setdefault','update','values','sort','__enter__','__exit__','read','readinto','readline','seek','write') if pf == 5 or pf == 7 or pf == 9: #CasioPython / Nspire+NumWorks KhiCAS MicroPython unsafe = ('sys.argv', 'sys.path')
if pf >= 0: curline=0 _p = print def print(*ls): global curline st="" for s in ls: if not(isinstance(s,str)): s=str(s) st=st+s stlines=1 if sh_inf[1]: stlines += sh_inf[2]*int(len(st)/sh_inf[1]) if curline+stlines>=sh_inf[0]: input("Input to continue:") curline=0 _p(st) curline+=stlines
def sstr(obj): try: s=obj.__name__ except: s=str(obj) a=s.find("'") b=s.rfind("'") if a>=0 and b!=a: s=s[a+1:b] return s
def isExplorable(obj): if str(obj).startswith("<module"): return False l = () try: l = dir(obj) except: pass return len(l)
def explmodr(pitm, pitm_name_l=[], pitm_str_l=[], pitm_val_l=[], reset=True): global curline, found pitm_name=sstr(pitm) if(reset): curline=0 found = [] pitm_name_l=[pitm_name] pitm_str_l=[str(pitm)] pitm_val_l=[pitm] hd="."*(len(pitm_name_l)-1) c = 0 l = sorted(dir(pitm)) for i in range(len(l)): l[i] = (l[i], getattr(pitm, l[i]), str(l[i])) try: if not isinstanceof(pitm, str): for i in range(len(pitm)): l.append((pitm_name+'['+str(i)+']',pitm[i],str(pitm[i]))) except: pass for itm in l: isFound = itm[0] in found c += not isFound isUnsafe = '.'.join(pitm_name_l + [itm[0]]) in unsafe or itm[0] in unsafe try: if isUnsafe: raise Exception print(hd+itm[0]+"="+str(itm[1])) except: print(hd+itm[0]) if not isFound: found.append(itm[0]) if not isUnsafe and isExplorable(itm[1]) and itm[1] not in pitm_val_l and itm[2] not in pitm_str_l: pitm_name_l2, pitm_val_l2, pitm_str_l2 = pitm_name_l.copy(), pitm_val_l.copy(), pitm_str_l.copy() pitm_name_l2.append(itm[0]) pitm_val_l2.append(itm[1]) pitm_str_l2.append(itm[2]) c += explmodr(itm[1], pitm_name_l2, pitm_str_l2, pitm_val_l2, False) return c
def explmod(s): global found module = __import__(s) found = [] return explmodr(module)
En comptant donc les modules non standard la TI-Nspire CX II reste parmi les meilleures solutions Python et c'est toujours Texas Instruments qui majore la promotion :
Autre point très attendu, les performances du PythonTI-Nspire CX II.
Commençons par les évaluer dans le contexte des calculs en virgule flottante à l'aide du script suivant, développé et utilisé pour le QCC 2020 même si nous n'avons pas eu le temps de faire un compte-rendu public des résultats. Petit algorithme de seuil dans le contexte d'une suite récurrente, niveau Première :
def seuil(d): timed,n=hastime(),0 start,u=0 or timed and monotonic(),2. d=d**2 while (u-1)**2>=d: u=1+1/((1-u)*(n+1)) n=n+1 return [(timed and monotonic() or 1)-start,n,u]
Pour un appel de seuil(0.008), la TI-Nspire CX II te répond au quart de tour en seulement 0,24s !
La TI-Nspire CX II est vraiment extraordinaire en calcul flottant Python écrasant toute concurrence de sa toute puissance, même en comptant les solutions Python tierces, et même en dopant la concurrence avec un overclocking au max !
Mais contrairement aux langages historiques de nos calculatrices, le Python distingue les nombres entiers des nombres flottants.
Pousuivons donc les tests de performances dans le contexte des nombres entiers, afin de voir si la TI-Nspire CX II s'en sort toujours aussi bien. Voici donc un script réalisant un test de primalité :
def nodivisorin(n,l): for k in l: if n//k*k==n: return False return True
def isprimep(n): t=hastime() s,l,k=0 or t and monotonic(),[3],7 if n==2 or n==5:return True if int(n)!=n or n//2*2==n or n//5*5==5: return False if n<k:return n in l while k*k<n: if nodivisorin(k,l):l.append(k) k+=2+2*((k+2)//5*5==k+2) r=nodivisorin(n,l) return (t and monotonic() or 1)-s,r
La TI-Nspire CX II répond ici à l'appel isprimep(10000019) en 0,56s !
Last but not least...Texas Instruments ne publie habituellement qu'1 à 2 mises à jour par an, mais alors quelle mise à jour cette fois-ci ! "Gute Dinge brauchen Zeit..." comme dit le proverbe allemand, "... and better things even longer" complète-t-on sans doute à Dallas.
Cela valait vraiment le coup d'attendre le PythonTI-Nspire CX II, une solution supérieure sur nombre de points à tout ce qui a pu se faire sur calculatrices concurrentes jusqu'à présent !
Texas Instruments semble avoir fait appel à des experts en Python et en pédagogie, l'assistant d'aide à la saisie, à ce jour une exclusivité à un tel niveau, est un fidèle compagnon qui devrait permettre de commencer à coder très rapidement et en grande autonomie, ravissant petits et grands, lycéens comme enseignants !
Texas Instruments semble également avoir été présent sur tous les fronts, on retient :
la meilleure implémentation Python officielle pour le nombre de modules standard disponibles
une capacité de tas / heap offert à la hauteur des grandes capacités de la machine, le plus grand tas / heap en mode examen, ce qui te permettra d'aborder sans contrainte des projets conséquents (interfaces, jeux, ...)
également la plus grande capacité de stack / pile en mode examen
de loin la plus grande bibliothèque de fonctions de tracé à ce jour, que ce soit par pixels ou par coordonnées, quoi que tu veuilles tracer il y a une solution !
cerise sur le gâteau la gestion fort bienvenue dans ce contexte du double buffering, des calques hors écran, ainsi que des images
des images pour ceux qui le veulent affichables sans effort et quasiment sans consommation mémoire d'une simple ligne, permettant à ceux qui le souhaitent de choisir d'avancer sur les graphismes d'un projet sans se casser la tête à coder des fonctions annexes - bref plusieurs niveaux d'entrée matière à différenciation pédagogique, mettant la réalisation de chefs-d'oeuvre à la portée de chacun et œuvrant pour la réussite de tous, de grands pédagogues chez TI
la solution Python la plus performante en mode examen, une fois encore à la mesure du matériel offert
Tout petit bémol, en espérant être entendu, nous regrettons par contre le non respect d'un standard comme matplotlib.pyplot pour le module de tracé dans un repère. C'est la bibliothèque mise en avant aux concours de recrutement des enseignants ; nous craignons que peu d'enseignants se lancent dans l'utilisation d'un ti_plotlib propriétaire qui sera incompatible avec les scripts des livres ainsi qu'avec la solution Python tournant en classe sur la tablette ou l'ordi, nuisant ainsi à l'interopérabilité. Autant sur le matériel limité de la TI-83 Premium CE Edition Python on pouvait comprendre ce choix, autant ici ce n'est pas le cas.
Il n'empêche que c'est une très belle mise à jour, le fruit doré d'un immense travail construit méticuleusement dès le départ autour des besoins des enseignants et des élèves, merci TI !