π
<-

TI-z80 TI-84 Plus CE révisions V+W et nouveau modèle CE NL !

New postby critor » 23 Jan 2023, 15:50

55705603Rentrée 2015, Texas Instruments bouleversait le marché des calculatrices graphiques en faisant passer le milieu de gamme dans le monde de la couleur. 3 nouveaux modèles CE allaient inonder simultanément la planète :
  • TI-83 Premium CE en France
  • TI-84 Plus CE-T en Europe
  • TI-84 Plus CE dans le reste du monde
Initialement et jusqu'à leur révision matérielle B (assamblage entre mai 2015 et janvier 2016), ces modèles utilisaient une même carte électronique de référence SG92A/F.

Toutefois, ces modèles ne partageaient pas le même logiciel. Par exemple la TI-83 Premium CE était capable d'effectuer du calcul exact QPiRac, et pas les TI-84 Plus CE. Le mode examen TI-84 Plus CE était de plus beaucoup plus restrictif, interdisant la plupart des applications officielles et même toute création de programme. Les systèmes d'exploitation étaient en effet différents et non interchangeables.

49324364Cette scission était mise en oeuvre grâce à une différence matérielle : les cartes TI-83 Premium CE et TI-84 Plus CE bien qu'identiques accueillaient deux déclinaisons différentes de la puce ASIC : ET2014-01 et ET2014-00. Le numéro final indique l'état de drapeaux non modifiables programmés en usine lors de la fonte de la puce, et est justement vérifié par le système d'exploitation que l'on tente d'installer ou utiliser.

Pour palier toute erreur d'aiguillage entre la chaîne d'assemblage amont de la carte et les chaînes d'assemblage aval correspondant aux boîtiers des différents modèles, la référence inscrite sur la carte était corrigée au feutre après soudure de ces composants différents :
  • le A était barré pour les cartes destinées à être intégrées dans les TI-83 Premium CE, ce qui donnait SG92F
  • le F était barré pour les cartes destinées à être intégrées dans les TI-84 Plus CE-T et TI-84 Plus CE, ce qui donnait SG92A
55964932Les TI-84 Plus CE-T européennes et TI-84 Plus CE internationales partageaient donc initialement la même référence de carte SG92A, bien que n'étant pas matériellement identiques.

En effet les TI-84 Plus CE-T disposaient d'une diode examen, ce qui n'était pas le cas des TI-84 Plus CE dont le circuit dédié restait non peuplé.

7713Et justement avec les révisions C-E (assemblées entre février 2016 et mars 2017), Texas Instruments utilise de nouvelles cartes de référence SG92A/F/AT.

Cette fois-ci il y a bien de quoi différentier les cartes peuplées pour les trois modèles sur la chaîne d'assemblage :
  • SG92F pour les TI-83 Premium CE
  • SG92AT pour les TI-84 Plus CE-T
  • SG92A pour les TI-84 Plus CE

155089088Pour les révisions I-L (assemblage entre mars 2017 et mai 2019), nouvelle carte SG93/F/T déclinée de façon similaire en :
  • SG93F pour les TI-83 Premium CE
  • SG93T pour les TI-84 Plus CE-T
  • SG93 pour les TI-84 Plus CE

1269911325Niveau modèles, il y a du changement à partir de la rentrée 2019 :
  • rentrée 2019 : la TI-83 Premium CE est remplacée par la TI-83 Premium CE Edition Python
  • rentrée 2020 : la TI-84 Plus CE-T est remplacée par la TI-84 Plus CE-T Python Edition
La nouvelle carte utilisée pour les premières révisions M-P (assemblage entre avril 2019 et juin 2020) conserve une référence similaire, SG95/F/T, ce qui donne par déclinaison :
  • SG95F pour les TI-83 Premium CE Edition Python
  • SG95T pour les TI-84 Plus CE-T puis TI-84 Plus CE-T Python Edition
  • SG95 pour les TI-84 Plus CE
113551272015501

14661Pour la rentrée 2021 sort la TI-84 Plus CE Python, à la différence qu'elle ne remplace la TI-84 Plus CE qu'en Amérique du Nord, ce qui porte l'éventail à quatre modèles CE partageant la même carte :
  • TI-83 Premium CE Edition Python en France
  • TI-84 Plus CE-T Python Edition en Europe
  • TI-84 Plus CE Python en Amérique du Nord
  • TI-84 Plus CE dans le reste du monde
Or les TI-84 Plus CE Python et TI-84 Plus CE ne sont pas identiques, le circuit dédié au coprocesseur 32 bits dédié aux fonctionnalités Python n'étant peuplé que sur les TI-84 Plus CE Python.

14054Nouvelle carte en conséquence à partir pour les révisions R-T (assemblage entre février 2021 et mars 2022). Sa toute nouvelle référence SG95N/F/T permettait bien cette fois-ci de distinguer les cartes aiguillées vers les quatre modèles différents sur la chaîne d'assemblage :
  • SG95F pour les TI-83 Premium CE Edition Python
  • SG95T pour les TI-84 Plus CE-T Python Edition
  • SG95N pour les TI-84 Plus CE Python
  • SG95 pour les TI-84 Plus CE

Résumons tout ceci :





révisions
(dates)
PCB
TI-83 Premium CE
TI-83 Premium CE
Edition Python
TI-84 Plus CE-T
TI-84 Plus CE-T
Python Edition
TI-84 Plus CE
TI-84 Plus CE
Python
A-B
(01/2015-01/2016)
SG92A/F
SG92F
SG92A
SG92A
C-F
(02/2016-03/2017)
SG92A/F/AT
SG92F
SG92AT
SG92A
I-L
(03/2017-05/2019)
SG93/F/T
SG93F
SG93T
SG93
M-P
(04/2019-06/2020)
SG95/F/T
SG95F
SG95T
SG95T
SG95
R-T
(02/2021-03/2022)
SG95N/F/T
SG95F
SG95T
SG95
SG95N

Mais l'histoire ne s'arrête pas là. Depuis novembre 2021 Texas Instruments est passé à l'assemblage de nouvelles révisions matérielles V puis W. Au menu une nouvelle référence de carte SG95N/F/T/NL, indiquant donc le passage à 5 déclinaisons simultanées de la plateforme CE :
  • SG95F pour les TI-83 Premium CE Edition Python
  • SG95T pour les TI-84 Plus CE-T Python Edition
  • SG95N pour les TI-84 Plus CE Python
  • SG95 pour les TI-84 Plus CE
  • et un mystérieux SG95NL
Texas Instruments semble donc nous préparer dans le plus grand secret un nouveau modèle CE qui intégrera la déclinaison SG95NL de cette dernière carte, peut-être pour la rentrée 2023.

Il s'agirait donc d'une calculatrice comportant au moins une différence matérielle interne avec tous les modèles actuels (TI-83 Premium CE Edition Python, TI-84 Plus CE-T Python Edition, TI-84 Plus CE Python et TI-84 Plus CE).

Reste encore à savoir de quoi il pourrait s'agir. Peut-être que le suffixe NL indique un modèle spécifique aux Pays-Bas, et nous avons plusieurs hypothèses en ce sens.

Il pourrait s'agir d'une version allégée de la TI-84 Plus CE-T Python Edition verrouillant la liste d'applications disponibles comme cela a été fait avec la TI-82 Advanced Edition Python française. Ceci pourrait permettre de baisser avantageusement le prix d'entrée de la technologie graphique Texas Instruments aux Pays-Bas. En effet rappelons que les Pays-Bas ont une liste de modèles autorisés aux examens, mise à jour chaque année. Or à compter de cette session d'examens 2023, le modèle monochrome TI-84 Plus T distribué exclusivement aux Pays-Bas (comparable à la TI-82 Advanced monochrome en France) n'est plus autorisé, ce qui fait que désormais l'entrée de gamme est occupée par la TI-84 Plus CE-T Python Edition bien plus chère.

Autre hypothèse, il pourrait s'agit d'une relance de l'ancien modèle TI-84 Plus CE-T (sans Python donc), vu que plusieurs de nos voisins européens ne veulent pas de la programmation sur calculatrices (les Pays-Bas notamment l'interdisent même explicitement en mode examen : tout accès à un éditeur de texte et donc entre autres de programme est interdit, ce qui empêche toute création de programme pendant l'épreuve). Cela permettrait d'économiser sur les coûts d'assemblage en ne peuplant pas le circuit dédié au coprocesseur Python, ce qui serait fort logique dans le contexte actuel de pénurie de semiconducteurs.

Rendez-vous lorsque nous aurons la réponse...

Source : viewtopic.php?f=8&t=19494#p270767

HP 1er visuel exploitable nouvelle HP 10sII

New postby critor » 23 Jan 2023, 11:02

Depuis 2007, les calculatrices scientifiques Hewlett Packard ont été extrêmement décevantes. Le constructeur a développé 2 séries de modèles :
  • les HP 10s (2007) et HP 10s+ (2012) avec des fonctionnalités d'entrée de gamme
  • les HP 300s (2009) et HP 300s+ (2012) avec des fonctionnalités de milieu de gamme

4137Le géant des calculatrices Hewlett Packard n'a plus semblé produire le moindre effort de développement ou travail d'innovation sur les calculatrices scientifiques ces 15 dernières années, se bornant à nous sortir de pauvres clones de modèles Casio. Une véritable insulte envers ses utilisateurs et fans historiques !

Il se trouve en effet que les HP 300s et HP 300s+ sont des clones de calculatrices scientifiques Casio de génération ES / Natural Display (2004) et ES+ / Natural VPAM (2008), s'opposant donc en France aux fx-92 Collège 2D (2007) et fx-92 Collège 2D+ (2008).

16163Les HP 10s et HP 10s+ sont des clones de calculatrices scientifiques Casio de génération MS/SVPAM, s'opposant donc en France à la fx-92 Collège (2004). Des caractérrisques de la génération MS/SVPAM sont :
  • un pavé quadridirectionnel
  • un écran hybride à 2 lignes :
    • une ligne de 12 cellules matricielles en 6×5 pixels chacune
    • une ligne de 12 cellules à 7 segments chacune (10 cellules pour la mantisse et 2 petites cellules réservées pour les exposants de l'écriture scientifique)

Certes les ressemblances d'écrans et claviers ne constituent pas des preuves à elles seules, mais on peut néanmoins mettre en évidence la supercherie de façon irréfutable en accédant au menu de réglage du contraste de l'écran, l'affichage de test étant alors constitué du nom CASIO exactement comme sur les Casio MS.

Si la HP 10s+ clone certes le logiciel de Casio, cela ne dit rien sur le matériel interne.

Effectuons un test, passons en mode degrés pour le calcul suivant :
$mathjax$Arcsin\left(Arccos\left(Arctan\left(tan\left(cos\left(sin\left(9\right)\right)\right)\right)\right)\right)$mathjax$


Le résultat théorique est de 9, mais en pratique les moteurs de calcul en virgule flottante de nos calculatrice répondent une valeur approchante. En regroupant alors les calculatrices par résultat, l'on peut identifier celles utilisant le même cœur de calcul, et par extension dans le cadre des calculatrices scientifiques la même famille de processeurs.

Une variante est de calculer
$mathjax$Arcsin\left(Arccos\left(Arctan\left(tan\left(cos\left(sin\left(9\right)\right)\right)\right)\right)\right)-9$mathjax$
, permettant ainsi d'afficher davantage de décimales par défaut.

16164L'ensemble des Casio scientifiques de génération S/VPAM (1994) à MS/SVPAM (2001) incluse répondent à l'unison 8.99999863704.

Or, la HP 10s+ répond tout autre chose, 9,000000002123857. La HP 10s+ utilise donc un processeur différent de celui des Casio MS.

Comme nous avons vu avec la HP 300s+, la HP 10s+ est par conséquent un clone logiciel de Casio MS, mais pour le matériel c'est tout autre chose qui a été utilisé et a donc nécessité une transcription du logiciel. Ce choix d'un matériel différent peut être motivé par des raisons de disponibilité et de coût.
Comme la HP 300s+, la production de la HP 10s+ a définitivement cessé.

En effet des composants nécessaire à son assemblage sont définitivement indisponibles.

Or les calculatrices scientifiques sont très importantes pour les examens de certains pays. C'est particulièrement le cas par exemple en Australie, où elles bénéficient même d'une liste officielle de modèles approuvés mise à jour annuellement. Tout faux pas est donc ici lourd de conséquences, car si il est facile de se faire éjecter de la liste lors d'une de ses mises à jour, il n'est pas sûr dans ce contexte que ce soit aussi simple de s'y faire réintégrer lors d'une version suivante.

Il était donc urgent que Moravia, société tchèque qui a racheté la branche HP calculatrices pour la rentrée 2021, réagisse...

16163Et c'est le cas, comme nous te l'avons annoncé Moravia sort un successeur, la nouvelle HP 10sII.

Et histoire d'éviter tout incident aux conséquence regrettables la priorité est justement donnée à l'Australie : tous les stocks produits sont acheminés là-bas ; la calculatrice n'est à ce jour pas distribuée ailleurs.

La technologie semble une fois de plus similaire à celle des Casio MS. Nous y retrouvons un écran hybride avec :
  • une ligne de 12 cellules matricielles
  • une ligne de 12 cellules à 7 segments (10 cellules pour la mantisse et 2 petites cellules pour les exposants)

16163Mais nous notions ici quelque chose d'inhabituel, absent de toutes les autres copies de Casio MS.

En effet les drapeaux en haut d'écran occupent désormais deux lignes. Y en avait-il davantage et donc indiquant ainsi peut-être l'ajout de nouvelles fonctionnalités ? Se pouvait-il que Moravia ait enfin daigné effectuer quelques efforts de développement ?

Difficile de savoir car le visuel partagé n'était pas en qualité optimale.

Si par neutralité nous envisagions l'hypothèse dans l'annonce précédente, nous n'y croyions que fort peu devant l'incurie démesurée et répétée de cette entreprise avec les calculatrices HP depuis maintenant 18 à 24 mois :
  • a de façon similaire racheté la branche calculatrices de Sharp en 2015 et n'y a apportée strictement aucune valeur ajoutée depuis ; la EL-9950G de 2013 restant le dernier modèle, aux spécifications matérielles et capacités logicielles absolument identiques à celles de la EL-9900G de 2001, avec donc désormais des décennies de retard sur la concurrence
    13805
  • n'a apporté aucune mise à jour à la HP Prime depuis la rentrée 2021, produit de plus de moins en moins adapté aux programmes du lycée français car son inertie lui fait à nouveau prendre les années de retard sur la concurrence qu'il avait péniblement rattrapées avec l'ultime mise à jour par HP, la 2.1.14588 du 5 mai 2021 (pas de turtle ni de matplotlib en Python entre autres), mise à jour ayant de plus introduit une forte instabilité du système, faisant de cette machine un produit défectueux vendu à prix d'or
  • ne fait pas davantage d'efforts pour le modèle d'entrée de gamme HP 39gII dont la dernière mise à jour de 2013 est encore lourdement bugguée, Moravia commercialisant ici encore un produit défectueux
  • ne fait même pas l'effort d'être présent aux journées APMEP, rendez-vous annuel incontournable des constructeurs de calculatrices en France ; a raté les éditions 2022 à Jonzac, 2021 à Bourges et même 2020 (le marketting français ayant été transféré à Moravia avant la finalisation de la cession de la branche calculatrices) alors que c'était par visioconférence et ne coûtait donc quasiment rien, mettant ainsi fin à plus d'une décennie de présence continue de HP à cet événement
  • les seuls changements effectués concernent les emballages et boîtiers et ne constituent pas des améliorations mais des économies sur le dos des utilisateurs :
    • suppression du numéro de série alors que c'est une information permettant de dater la machine, ce qui peut être crucial pour nous lorsque nous apportons de l'aide à des utilisateurs, mais également pour les acheteurs (et collectionneurs) sur le marché de l'occasion
    • emballage unique à la place des emballages localisés pour différentes zones de commercialisation de par le monde
    • de même parce que la réglementation australienne l'exige, embête le monde entier avec des vis sur les compartiments de piles, cassant totalement l'intérêt d'un panneau à clipser/coulisser, de façon fort inesthétique car n'étant ni dans un coin ni centrées (c'est-à-dire a recherché l'effort minimal : ajout de vis là où ça pouvait sans aucune révision du boîtier interne)
  • mi-septembre 2022, à l'occcasion d'une visioconférence lors du HHC 2022, réunion des fans de HP à Nashville, annonce enfin d'une mise à jour HP Prime majeure imminente pour le mois de Novembre (replay), mise à jour que nous attendons toujours (à moins qu'il n'eusse fallu comprendre Novembre 2023, car la dernière réponse de Moravia ce mois-ci permet d'éliminer toute imminence...)
  • pour les projets de développement matériels, ne semble pas du tout prévoir de préparer l'avenir avec la conception de nouveaux modèles innovants comme en aurait été capable HP, mais uniquement des rééditions collector d'anciens modèles, sans doute avec des prix en conséquence pour les fans/nostalgiques de HP

Aujourd'hui OfficeWorks, distributeur australien, nous partage enfin un rendu en bonne qualité de la HP 10sII, qui plus est à l'écran de diagnostic activant tous les drapeaux de l'écran.

Bien que ne nous attendant à pas grand chose de la part de Moravia, nous arrivons quand même à être déçus. Regarde bien, il y a très exactement le même nombre de drapeaux que l'ancienne HP 10s+, ni plus, ni moins.

Moravia a tout simplement décidé de répartir désormais les drapeaux de haut d'écran sur 2 lignes.
Ancienne HP 10s+ :
Code: Select all
S A hyp M STO RCL SD REG CMPLX MAT VCT EQN D R G FIX SCI  r < 0 Eng R batt ?

Nouvelle HP 10sII :
Code: Select all
S         SD   REG   CMPLX   MAT   VCT   EQN   FIX   SCI
A   hyp   M   STO   RCL            D R G r < 0 Eng R batt ?

Un agencement fort inesthétique avec un espace vide perdu au centre de la ligne inférieure. Décidément entre ça et la vis on aime bien les trous chez Moravia, horrible et large plaie que l'on fit à la pauvre HP. Une fois de plus du travail bâclé ne prenant pas en compte l'intérêt de l'utilisateur final. Volonté de donner l'illusion qu'elle a un plus grand écran ?...

Nous commençons à être bien fatigués de toujours laisser le bénéfice du doute dans nos annonces à une entreprise qui semble se complaire dans la médiocrité. Recherche du profit immédiat visiblement sans vouloir faire le moindre investissement, économies sur le dos des utilisateurs, promesses en l'air tellement démesurées qu'elles en sont une insulte envers ceux qui ont un minimum de compréhension de ce que cela impliquerait comme travail et investissement derrière, faux nouveaux produits, commercialisation de produits défectueux, refus de préparer l'avenir du marché scolaire et à la place tentative de capitaliser sur la nostalgie des fans de la branche HP calculatrices alors que même en ne considérant que ses dernières années Moravia n'en est qu'une bien pale copie... décidément cette entreprise est complètement à côté de la plaque et ne fait que précipiter la fin des calculatrices HP. Le pire étant d'avoir la bêtise de reproduire ces mêmes erreurs alors qu'elles ont déjà conduit les calculatrices Sharp à l'anéantissement...

Source : https://www.officeworks.com.au/shop/off ... ii-hp10sii

Crédits images : tests HP 10s+
Link to topic: 1er visuel exploitable nouvelle HP 10sII (Comments: 2)

Examens Liste calculatrices scientifiques HSC 2023 Australie

New postby critor » 19 Jan 2023, 15:45

En Australie, l'équivalent de l'examen du Baccalauréat français est le HSC (Higher School Certificate).

L'État de Nouvelle-Galles-du-Sud n'y autorisait que des calculatrices scientifiques non graphiques, faisant de plus l'objet d'une liste officielle de modèles approuvés.
Rappelons que l'Australie est un pays très important pour les calculatrices scientifiques, ayant bénéficié récemment de nouveaux modèles :
  • dans le cadre du passage de Casio à de la génération EX Classwiz à la nouvelle génération CW Classwiz, nouvelle fx-8200AU dédiée à l'Australie, remplaçant à la fois les anciens modèles fx-82AU X et fx-100AU X
  • suite à la pénurie de composants permettant l'assemblages des HP 10s+, passage de Moravia à une nouvelle HP 10sII qui bien que non spécifique n'est pour le moment n'est distribuée qu'en Australie

La liste officielle vient donc d'être mise à jour pour la session 2023, alors découvrons tout cela ensemble.

Sont toujours autorisées 2 calculatrices Abacus :
  • SX-II MATRIX a
  • SX-II MATRIX n

Passons maintenant du côté de Canon, dont la F-717SGA était autorisée en 2022.

S'y ajoutent pour 2023 les F-715SG et F-730SX.

Casio, la référence universelle en terme de calculatrices scientifiques, était déjà fort bien représenté avec les :
  • fx-350MS
  • fx-85MS
  • fx-82AU
  • fx-100AU
  • fx-82AU PLUS
  • fx-82AU PLUS II
  • fx-100AU PLUS
  • fx-82AU PLUS II 2nd Edition
  • fx-100AU PLUS 2nd Edition

Nouveauté, le dernier modèle fx-8200AU devient autorisé.

Hewlett Packard (ou ce qu'il en reste...) était donc déjà autorisé avec les modèles suivants :
  • HP 10s
  • HP 10s+
  • HP 300s

Changement pour 2023, la toute dernière HP 10sII est autorisée.

Pas de changement du côté Jastek, restent donc autorisées les :
  • JasCS1
  • JasCS EVO
  • JasCS2 EVO

Rien ne bouge du côté de RSB et Scholar, les FB 350MS et SC-250MX sont reconduites.

Nous arrivons à Sharp où la liste de modèles ne varie pas non plus :
  • EL-531TH
  • EL-531VH
  • EL-531WH
  • EL-531X
  • EL-531XH
  • EL-W531HA
  • EL-W532TH
  • EL-W532XH

Du côté de Texas Instruments pas de changement non plus :
  • TI-30XB MultiView
  • TI-30X Plus MathPrint

Enfin les candidats malvoyants peuvent utiliser des calculatrices scientifiques leur étant dédiés :
  • Orian TI-30X MultiView
  • sight enhancement systems SciPlus 2200
  • sight enhancement systems SciPlus 2300
Pour l'anecdote, notons que des calculatrices graphiques, toujours autant axées accessibilité, existent aussi chez sight enhancement systems :
Malheureusement la prise en charge au moins partielle par la collectivité de ces équipements pour ceux qui en ont besoin semble paradoxalement pousser les prix à une hausse irraisonnée (c'est extrêmement cher pour ce que c'est), si bien que nous ne sommes pas près de te les tester.

Source : https://educationstandards.nsw.edu.au/w ... alculators

Casio Mise à jour img2calc images Python monochromes transparentes

New postby critor » 18 Jan 2023, 12:54

13917img2calc est notre service en ligne gratuit de conversion d'images pour tes projets sur calculatrices.

Un large choix de formats cible t'est proposé :
  • fichiers à appeler depuis tes programmes en langage Basic :
    • .g3p pour Casio Graph 90+E et fx-CG50/20/10
    • .c2p pour Casio fx-CP400 et fx-CG500
    • .8ca ou .8ci pour TI-82 Advanced Edition Python, TI-83 Premium CE, TI-84 Plus CE et TI-84 Plus C Silver Edition
    • .8xi pour TI-83 Plus (compatible TI-82 Plus, TI-82 Advanced monochrome et TI-84 monochrome),
    • .83i pour TI-83 (compatible TI-82 Stats et TI-76.fr)
    • .82i pour TI-82
    • .86i pour TI-86
    • .85i pour TI-85
    • .73i pour TI-73
  • fichiers à appeler depuis tes scripts en langage Python :
    • IM8C.8xv pour les éditions Python des TI-83 Premium CE et TI-84 Plus CE
  • scripts Python pour les différentes bibliothèques de tracé par pixels disponibles selon les modèles :
    • ti_draw (TI-Nspire CX II)
    • graphic (TI-Nspire CX II avec KhiCAS, TI-Nspire CX avec KhiCAS, NumWorks avec KhiCAS, Casio Graph 90+E et fx-CG50 avec KhiCAS)
    • nsp (TI-Nspire avec Micropython)
    • ti_graphics (TI-83 Premium CE et TI-84 Plus CE éditions Python)
    • casioplot (Casio Graph 90/35+E II, fx-9750/9860GIII et fx-CG50)
    • hpprime (HP Prime)
    • kandinsky (NumWorks)

Aujourd'hui, parlons donc de la conversion d'images en scripts Python pour calculatrices graphiques munies d'un écran monochrome.

Il s'agit de :
  • la dernière génération USB Power Graphic 3 de calculatrices graphiques Casio monochromes (depuis 2019) : Graph 35+E II, fx-9750GIII et fx-9860GIII
  • la première génération monochrome de TI-Nspire (2007-2011) : TI-Npspire, TI-Npspire CAS, TI-Npspire Touchpad et TI-Npspire CAS Touchpad
Autrement dit de nos jours, les conversions Python pour écran monochrome concernent essentiellement les modèles Casio.

Les Graph 35+E II, fx-9750GIII et fx-9860GIII étant pourvues d'un écran 128×64 pixels, voici ce que cela pouvait te donner :

Mais dans ce contexte, cela se passait parfois mal. C'était le cas lorsque tu fournissais une image utilisant de la transparence. Tu obtenais alors une forme entièrement noire, entièrement blanche, ou pire entièrement vide :


Le problème venait du fait que lorsqu'il devait générer un script Python pour calculatrice monochrome, img2calc travaillait sur 2 couleurs. Or pour ce genre d'image la transparence compte comme une 3ème couleur, et en conséquence une couleur était perdue lors de la conversion.

Et bien bonne nouvelle, la dernière mise à jour sortie ce jour corrige ce problème.

Désormais lorsque tu lui fournis une image transparente à convertir en script Python pour un écran monochrome, img2calc travaille bien sur 3 couleurs.

Il t'est donc enfin possible d'utiliser des images transparentes pour tes projets Python sur Casio Graph 35+E II et fx-9750/9860GIII ! :bj:
Code: Select all
#image converted on TI-Planet
#tiplanet.org/img2calc

from casioplot import set_pixel


#the image drawing function
#- rle : image RLE-compressed data
#- w : width of image
#- pal : palette of colors to use with image
#- zoomx : horizontal zoom
#- zoomy : vertical zoom
#- itransp : index of 1 transparent color in palette or -1 if none
def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1, itransp=-1):
  i, x = 0, 0
  x0, y0 = int(x0), int(y0)
  nvals = len(pal)
  nbits = 0
  nvals -= 1
  while(nvals):
    nvals >>= 1
    nbits += 1
  maskval = (1 << nbits) - 1
  maskcnt = (0xFF >> nbits >> 1) << nbits
  while i<len(rle):
    v = rle[i]
    mv = v & maskval
    c = (v & maskcnt) >> nbits
    if (v & 0b10000000 or nbits == 8):
      i += 1
      c |= rle[i] << (7 - nbits + (nbits == 8))
    c = c + 1
    while c:
      cw = min(c, w - x)
      if mv != itransp:
        col = pal[mv]
        for l in range(0, zoomy, zoomy < 0 and -1 or 1):
          for k in range(cw):
            for p in range(0, zoomx, zoomx < 0 and -1 or 1):
              set_pixel(x0 + (x + k)*zoomx + p - (zoomx < 0), y0 + l - (zoomy < 0), col)
      c -= cw
      x = (x + cw) % w
      y0 += x == 0 and zoomy
    i += 1


#palette for your image
#3 RGB-888 colors
palette_pplan = (
(0,0,0),(248,252,248),(0,0,0),
)

#your image data
#72x64 RLE-2 pixels
image_pplan = (
b'H\21&\1\xd8\1\5\22\t\6\t\2\5\xd0\1\5\6-\6\5\xcc\1\5\x025\6\5\xc8\1\1\69\2\5\xc8\1\1\2=\6\1\xc8\1\1\2A\2\1\xc8\1\1\x025\2\5\2\1\xc8\1\1\2\r\n\t\6\1\6\5\2\1\xc8\1\1\2\25\2\t\16\5\6\5\xc4\1\1\6!\n\t\n\t\xbc\1\5\2\t\2\25\n\r\6\t\xb8\1\5\2\5\6\25\n\25\2\t'
b'\xb0\1\t\2\1\n\21\22\25\2\t\x84\1)\n\t\2\x012\t\6\5\x80\1\1*\25\16\r\32\t\6\1\xfc\0\5\2\25\6!\16!\6\t\2\1\xfc\0\1\6%\2\25\26-\2\1x\5\2%\16\21\26\t\16\r\2\1x\1\6\t\6\25\26\t\26\5\2\5\26\1t\5\2\t\32\r\16\25\n\5\2!t\1\6\t\6\5\22\t\6\31\16\5\6\5\x84\1\5\2'
b'\r\6\r\26\35\22\t\6\1\x84\1\1\6\t\16\1"\21\36\t\2\5\xfc\0\5\2\r\36\1\32\5&\5\6\5x\1\6\tF\5&\5\6\tl\5\2\r\2\1B\5\16\1\22\5\n\td\5\2\t\6\t*\1\16\1\16\1\26\t\6\21X\1\6\t\6\r&\5\n\1\16\5\26\t\16\rP\1\2\r\6\r\2\5*\1\22\r\16\25\16\1P\6\t\n\t\2\1.\5\22\5\2\5'
b'\6\t\2\25\2\1P\2\r\n\21.\1\26\5\6\5\2\5\32\1\2\5L\2\t\22\r*\1\36\5\6\t\36\1\6\5H\2\t\26\t&\5"\5\6\5\22\21\6\t@\2\t\32\5&\1\26\t\2\t\2\5\2\t\2\25\6\t<\2\21\2\5\6\1&\1\26]\6\t4\2\21\2\1\6\5"\5\22\31\2\5\22)\n\x050\2\25\n\1&\1\22\25\2\21\6\1\n)\6\t(\2\25'
b'\n\1"\1\22\r\6\31\6\t\n%\n\5$\6\35"\5\22\t\2%\2\21\6)\6\t\34\6\25&\5\16=\6\21\n%\n\t\24\1\2\21\32\1\6\5\2\25\n-\6\1\4\t\6)\6\t\20\1\2\21\22\t\2\5\2\25\6\1\6-\2\1\f\5\n%\n\t\b\5\2\r\16\25\2\25\6\t\n%\2\5\f\t\6)\6\t\4\5\2M\6\5\0\t\6!\6\1\24\5\n)\2\5\b\1'
b'\6%\2\r\2\5\6\5\f\5\2%\2\1\30\t\6%\6\5\4\5\6\35\6\r\2\5\2\5\20\5\2\31\6\1\2\1 \5\n!\6\5\4\5\26\5\16\5\n\1\2\5\20\1\6\1\36\1\2\5 \t\6!\6\1\b\25\2\5\36\5\2\1\24\1\2\5\2\t\16\1\6\1(\t\n\31\2\1\34\1\2\1\6\5\22\5\2\1\24\1\2\5\2\t\16\5\2\1,\r\n\21\2\1\30\5\2'
b'\1\n\1\22\1\6\1\24\1\2\5\36\5\2\18\t\16\1\6\1\30\1\6\1\36\5\2\5\24\1\2\t\26\5\6\1@\r\n\5\24\5\2\5\32\t\2\1\30\1\6\5\22\5\6\5L\25\20\5\6\5\26\5\n\1\30\5\2\5\22\5\2\5\xfc\0\1\6\5\32\5\2\t\34\1\2\5\22\5\2\1\x80\1\1\2\t\26\5\2\5$\1\2\5\26\1\2\5x\5\2\5\32\1'
b'\6\5$\1\2\1\32\1\6\tp\5\2\5\32\1\2\5(\1\2\1\32\5\n\td\5\2\t\32\1\2\5(\1\2\1\36\t\6\tX\t\6\5\32\5\2\1,\1\2\1"\r\6\5T\5\6\5\36\5\2\1,\1\2\1*\t\6\1T\1\2\t"\5\2\1,\1\2\x012\5\2\1T\1\2\5\36\t\2\5,\1\2\35\26\5\2\1T\1\2\5\32\t\6\5,\1\n5\2\1P'
)

#palette for your image
#2 RGB-888 colors
palette_dplan = (
(248,252,248),(0,0,0),
)

#your image data
#114x64 RLE-1 pixels
image_dplan = (
b".\3\2\r\2\3\0\3\xb8\3\17\xdc\1\1\xf6\n\1\xe0\1\1\xde\1\3\xde\1\3\xe0\1\1\xe0\1\1\xde\1\3\xde\1\5\xda\1\a\xda\1\t\xd8\1\t\xd6\1\r\xd2\1\21\xce\1\25\xcc\1\25\xcc\1\25l\17N\25j\23\2\3\0\5>\23f)\0\x056\17f%\2\1\0\v0\rh'\6\t2\vh92\tj!\4\a\0\t,\r4\1>\27\6\17"
b"*\r6\5.\1\b\25\16\5\0\1\2\3\n\v\4\31,\v,\3\6\23\6\3\b\3\0?\"\3\0\21*\5\2\25\16\3\0\3\0\1\2\3\x041\269\22\3\6\33\b\1\0\3\20m\2\35\6\3\4\25\n\3\b\1\n9\0Y\4\1\2\25\6\31\4\x9d\1\4\33\2\31\4y\0\31\2\5\0\xbb\1\0\5\0\5\0\t\0\a\0\xc1\1\f\1\0\3\fy\0\27\6\27\0\3"
b"\24\5\22[\x001\0\23\"\a\0\a\n\35\n-\0\1\x001\f\1\n\a\16\23\22\3 \v\6\a\29\4\t\4\3\b\25\b\t\b\1\n\1 \v\b\5\6\3\0\31\x001\0\31\6\t\20\1\b\1\n\5\n\23\0\3\16\1\4\v\f\3\0\1\0?\4\v(\t\6\31\26\v\6\a\16)\20\a\2\1\22\1\30\5\4\25\0\1\16\1\2\37\x005\20\5@\5\n\1\f"
b"\5\2e\xfe\0O\b\tN\v$\27\6\5\2\1\0\a\0\25\b\r\0\t^\a\b\r\20\5\f\t\4\35\n\vf\21\0\1\f\5\n-\f\tF\3\20\33\n\1\4\3\6\1\2-\16\5T!\26\5\n-\16\3N%\32\3\f\21\6\21`%0\a\4\v\0\27\34\3\0\3.'.\1\x027\22\x036%83\20\3:%.\1\b/(\3&!.;*\1(\t\0\x1309"
)

#image drawing code sample
from casioplot import show_screen
draw_image(image_dplan, 0, 0, 114, palette_dplan, zoomx=1, zoomy=1, itransp=0)
draw_image(image_pplan, 0, 0, 72 , palette_pplan, zoomx=1, zoomy=1, itransp=0)
show_screen()

16354


Bonnes conversions à toi, et n'hésite surtout pas à nous montrer tes projets ! ;)

Liens :

Divers Mise à jour img2calc Python : optimisation palette KhiCAS

New postby critor » 17 Jan 2023, 11:36

13917Dans une série d'articles précédents nous te présentions img2calc, notre service en ligne gratuit sur TI-Planet te permettant de convertir facilement et rapidement tes images pour tes projets sur calculatrices.

Un large choix de formats cible t'était proposé :
  • fichiers à appeler depuis tes programmes en langage Basic :
    • .g3p pour Casio Graph 90+E et fx-CG50/20/10
    • .c2p pour Casio fx-CP400 et fx-CG500
    • .8ca ou .8ci pour TI-82 Advanced Edition Python, TI-83 Premium CE, TI-84 Plus CE et TI-84 Plus C Silver Edition
    • .8xi pour TI-83 Plus (compatible TI-82 Plus, TI-82 Advanced monochrome et TI-84 monochrome),
    • .83i pour TI-83 (compatible TI-82 Stats et TI-76.fr)
    • .82i pour TI-82
    • .86i pour TI-86
    • .85i pour TI-85
    • .73i pour TI-73
  • fichiers à appeler depuis tes scripts en langage Python :
    • IM8C.8xv pour les éditions Python des TI-83 Premium CE et TI-84 Plus CE
  • scripts Python pour les différentes bibliothèques de tracé par pixels disponibles selon les modèles :
    • ti_draw (TI-Nspire CX II)
    • graphic (TI-Nspire CX II avec KhiCAS, TI-Nspire CX avec KhiCAS, NumWorks avec KhiCAS, Casio Graph 90+E et fx-CG50 avec KhiCAS)
    • nsp (TI-Nspire avec Micropython)
    • ti_graphics (TI-83 Premium CE et TI-84 Plus CE éditions Python)
    • casioplot (Casio Graph 90/35+E II, fx-9750/9860GIII et fx-CG50)
    • hpprime (HP Prime)
    • kandinsky (NumWorks)

Aujourd'hui, parlons donc de la conversion d'images en scripts Python par img2calc.

Le code des scripts obtenus se compose de 3 éléments :
  • une fonction affichant une image
  • les données de l'image
  • la palette de couleurs associées
Par exemple pour l'image ci-contre, tu pouvais obtenir ce genre de script :
Code: Select all
#image converted on TI-Planet
#tiplanet.org/img2calc


#the image drawing function
#- rle : image RLE-compressed data
#- w : width of image
#- pal : palette of colors to use with image
#- zoomx : horizontal zoom
#- zoomy : vertical zoom
#- itransp : index of 1 transparent color in palette or -1 if none
def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1, itransp=-1):
  i, x = 0, 0
  x0, y0 = int(x0), int(y0)
  nvals = len(pal)
  nbits = 0
  nvals -= 1
  while(nvals):
    nvals >>= 1
    nbits += 1
  maskval = (1 << nbits) - 1
  maskcnt = (0xFF >> nbits >> 1) << nbits
  while i<len(rle):
    v = rle[i]
    mv = v & maskval
    c = (v & maskcnt) >> nbits
    if (v & 0b10000000 or nbits == 8):
      i += 1
      c |= rle[i] << (7 - nbits + (nbits == 8))
    c = c + 1
    while c:
      cw = min(c, w - x)
      if mv != itransp:
        col = pal[mv]
        for l in range(0, zoomy, zoomy < 0 and -1 or 1):
          for k in range(cw):
            for p in range(0, zoomx, zoomx < 0 and -1 or 1):
              set_pixel(x0 + (x + k)*zoomx + p - (zoomx < 0), y0 + l - (zoomy < 0), col)
      c -= cw
      x = (x + cw) % w
      y0 += x == 0 and zoomy
    i += 1


#palette for your image
#12 RGB-888 colors
palette = (
(0,0,0),(104,40,120),(136,112,80),(80,192,0),(248,132,24),(160,168,160),(248,252,0),(0,252,248),(248,0,0),(248,252,248),(248,172,176),(0,0,248),
)

#your image data
#160x154 RLE-4 pixels
image = (
b'P\x81\1P\x81\6\xf0\0\1\0\1\20\1\x90\3QP\2\23\1\0\21\xa0\1\xf1\0\0\1\xf0\0\x110\xb2\1\4\2\0\2\1\x92\6`\2\0\5\20\2\1\2\20\5\1 \1\xf0\1b \2\0\4\26\4\0\27\0\xf8\0\20\xf1\0\0\27`\22P\2\4\x92\1\4\2\20\1\xf2\5\x80\1\22\0\1\22\20\25\2@\2\20\2\0\xf2\0\0b \2\0\6'
b'\31\6\0\27\xb0\2\27\0\5\27\5\20\22\xf0\0\2\4\x92\1\4\2\20\xe2\5\xb0\1\2\20\5\2\25\0\x020\2\20\2\0\xf2\0\0b \2\0\6\31\6\0\27\0\x85\1\0\xf8\0\0\27\0\a\31\a\20\22\xa0\1\4\x82\1\24\2\0\1\xc2\5P\22\20\22\5\2\0\1\5\22\0\x020\2\0\22\0\xf2\0\0b \2\0\n\26\n\0'
b'\27\0\25G\25\0\bJ\4\b\0\27\0\a\31\a\20\22\xb0\1\2\4\x82\1\24\2\0\1\xa2\5@\2%\x025B\1\0\22\20\1"\0\xf2\0\0b \2P\27\0\25\27\31\a\25\0\bZ\b\0\27\0\5\27\5\20\22\xe0\1\1\x92\1\0\1\0\x92\5@\2%\x025"\5\1\5\21\5 "\1\xf2\0\0b \2\x001\0\27\0\25\a\t\'\25\0\bZ\b\0'
b'\27\x001\20\22\xf0\1\x92\1\4\2\20\21\xe2\4@\1\2\25\2\5\22\1\5"\0\5\21\2\5 \xa2\1\0b \2\0\'\5\0\27\0\25\a\t\'\25\0\bZ\b\0\27`\22\24\xf0\1\2\4\xf2\0\24 \1\xc2\4`\1" \25\2\20\5\0\22\25\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\27\31\a\25\0\bZ\b\0\27\0\n\26\n\20B'
b'\24\2\xe0\1\4\x82\1\4\2\20\xb2\4\xf0\0\5\2 \2\25\22\25\0\2%\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\a\t\'\25\0\bZ\b\0\27\0\6\31\6\20\xf2\0\24\xe0\1\4\xf2\0\24\2\0\1\x92\4P5\2\25\2\5\0R% \x1252\0b \2\0\5\27\x050\25G\25\0\bZ\20\27\0\6\31\6\20\xa2\1\24\xe0\1'
b'\xf2\0\24\2\0\1\xf2\3P\5\2\25\2\25\2\0\2\1\2\0"\5\2\5\2\xc0\1b \2P\27\1\0\1\x057\25\0\b:\30@\n\26\n\20\xe2\1\xd0\1\1\x82\1\0\1\0\xe2\3P\2\1"\5\22\x010"\5\2\25\x010Q\20b \2\0\2\23\1\0\'\1\0\x017\25\0\b*\b \21\20\2\23\1\20\xf2\1\4\xc0\1\22\1R\4\2\20\21'
b'\xb2\3\x80\1\1\22\1\x020b\x150b\0b \2\0\4\26\4\0G\0\5\'\25\0\b\32\b\20\x017`\x82\2\24\xd0\1\4b\4\2 \1\x92\3`\2\0\2\5\0\2@b\5" R\0b \2\0\6\31\6\0W\0\1\5\a\25\0\b\n\b\0\1W\0\5\27\5\20\22\0\24\xc2\1\4\xf0\1\24R\24\2\20\x82\3`\5 \1P25\2\5\2\5 B\0b \2\0\6'
b'\31\6\0W\1\0\1%\0\30\20g\0\a\31\a\20\22\4 \24\x92\1\4\xa0\2b\24\2\0\1\xe2\2\xf0\0"PB\25\0\22\5\x1202\0b \2\0\n\26\n\0\xf7\0\0\1\25\0\b\20\xf7\0\0\a\31\a\x102$ \24R\4\0\xf2\0\4\xa0\1\4R\24\2\0\1\xc2\2P\2\x90\1\22\5\2\0\25\0\22\25\2\1 \1"\0b \2P\x87\1\1P'
b'\xf7\0\0\5\27\5\20b\20\2\4\0R\4\0\xf1\0\4\22\x90\1\x82\1\0\1\0\xb2\2P\5\x90\1\22\25\0\5\0"\25\x120"\0b \2\x001\0W!@\2\0\1g\x001\20\x92\1\4\20\4B\x80\1\4"\4\x80\1\22\1B\4\2\20\1\x92\2P\5\x90\1\2%\0\1\0\x125\22\x102\0b \2\0\'\5\0\'\21P(\4\b\0a`\xb2\1\24 '
b'\4\x90\1\4B\24\x80\1\24B\4\2\20\1\xf2\1@\22\1\x80\1\2%\2\20\22%"\x102\0b \2\0\a\31\a\0\27\1\20\2D \30\x80\1\n\26\n\20\xe2\1\24\2\x90\1\4\x82\1\x80\1\2\4B\4\2 \xd2\1@\5\2@\22\1\20\2% \x025"\x102\0b \2\0\a\31\a\0\a\1\0\2\24\26\t\26\4\6\2P\5\27\5\0\6\31\6'
b'\20\xf2\1\4\xa0\1\4\x82\1\24\x90\1\x042$\2\0\1\xb2\1@\22 B\20\2\25\2 \2%\2\0\22`b \2\0\5\27\5 \x146\t6\4\0\n\26\4\0\a\31\a\0\6\31\6\20\xf2\1\4\xa0\1\24\xa2\1\24\xf0\0\2\4B\24\2\0\1\x92\x010\25\2\20b\0\2\25\2 \2\25\2\0\22\1\x102\0b \2P\24\6\t\6\31\6\24@'
b'\6\31\6\0\a\31\a\0\n\26\n\20\xf2\1\4\xd0\1\1\xc2\1\x80\1\1R\0\1\0\x82\x010\25\2\20b\0\2\25\22\x102\0\22 2\0b \2\0\2\23\1\0\4\5\6\t\6\t\n\4\2\x001\0\6\31\6\x007\0\2\23\1\20\xf2\1\4\xe0\1\4\xa2\1\24\x80\1\2\x012\4\2\20\1b0\25\2\0\xf2\0\0\2\25\22\20\1\22'
b'\20\22\20B\0b \2\0\4\26\4\0\4\t&\22 \'\5\0\6\t\n\6\0\1\27\1`\22\20Db\4\0\xa2\x014\x104R\4\xa0\1\x142\4\2\20\1B0"\0b\20\2\25\2@\2\0\5\22\20B\0b \2\0\6\31\6\0\4\31$0\a\31\a\0\n\26\2@\1\xa2\x0104"\4\xb0\1\x042$\20$"\4\xd0\1\4"\24\2\x102 \25\22\0R\1\x102P'
b'\2\25\2 2\0b \2\0\6\31\6\0$\2\0\n\26\n\0\a\31\1@\xd2\2 \22\24\xb0\1\4b$ $\0R\24`\24\22\24\2\20\22\0\5\0\25\22\0R\20%\22@B 2\0b \2\0\n\26\n\0\4\2 \6\31\6\0\5\27\20\xc2\3\xf0\1\4\x92\x014\x80\1\4\22\24`\x042\0B\25\22\0B\0\1\0B0R\1\20\1"\0b \2\xa0\1\6\31'
b'\6@\xe2\3\1\xd0\1\4\xd2\1\x80\1\4RP\1\2\24\0"\1\2\0\5\1\2\x001\20\2\21\2\1\x120!20\1\2\0b \2\x001\x001\0\4\n\6\4\20\21\xb2\1\xf1\0\xc2\1\4\xc0\1\4\xe2\1\xf0\0\4R\4P"\0\22\20\1\0\2\0\2`\2\20\2\0\22`\2\21\x120\2\0b \2\0\'\5\0\'\5\0$\5\1\xa2\1!\x80\1\xc2'
b'\1\4\0\xb2\x014\xa2\1\4\xf0\x0042\24\xf0\0\x120\2\0b\0\2\20\2\0\22\0\1"% \x020\2\0b \2\0\a\31\a\0\a\31\a\0\2\20\xa2\1\xd0\1\xc2\1\4\x80\x024b\4\0b\24\20$\22\4P2\0\x82\x035\2\xf0\0b \2\0\a\31\a\0\a\31 \x82\1\1\x80\1\t\x050\25\xc2\1\4\xd0\x01204\22\4\xf0'
b'\0\4\22$\20\4\2P2\0R@\22\0\2@BU\x010\2\0b \2\0\5\27\5\0\5\a\20\x92\1`\x82\3\4\0\xa2\1\20\x82\x010\4\2\xf0\0\4R\24`2\0\x120\1\0\2\20R \2\20\1\2\5\0E0\2\0b \2\xf0\0\1\xf2\0P\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\xa2\1\20\x82\x011\4\x80\1\4b\4`2\0B\0!\2'
b'\1b\1\20\22\0\21\20E \2\0b \2\0\2\23\1\20\xf2\0\1`\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\x91\1\2\20\xc2\1\4\x80\1\4b\4`2\0\2E \x92\1\1\0%\1\25\20\2% \2\0b \2\0\4\26\2\1\xf2\0P\25\1\5\1\5\1\5\0\1\25\1\5\1\5\1\5\0\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0D"\4'
b'`2\0\2\25"\5\20\x82\1\x112%0\25 \2\0b \2\0\6\t\2\1b\1@\xc5\2\xc2\1\4\xa0\1\2\20\xc2\1\4\xd0\1\2$`2\0\2\5\2%\2\5\20b\1\0\22\25\2%\0\2\1\20\2 \2\0b \2\0\6\5\0b\x010\xb2\4\4\xf0\0\2\20\2\20\xc2\1\4\0\xf2\0\0" \22`2\0\2\5"\5\2\5\2\20R\20\2e\0\22P\2\0b \2\0'
b'\n\0b@\4@\4\0\4\0\4@\4\0\4\0\4 \xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\2\25\22\25\2\0\2\0\x012\20\22e\0\22\1 "\0b \2\20b@\2\0\22\5\x020\2\0\22\5\x020\2\0\22\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\1E\2\1\0\5'
b'\x102\0\1\2\1"%\0"0"\0b \2\0\1R \1\5\1\5\0\1\2\x050\1\5\0\1\2\x050\1\5\0\1\2\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\20\1%@\5\20\22\0\1\22\x102\21\22@!\0b \2\1R \2\25\2\5\20\1 \2\0\2\5\20\1 \2\0\2\5\20\1\0\xc2\1\x040\1\0\1\0\4\20\2'
b'\20\xc2\1\4\20\2@\2\0R\4\xf0\x002`\22 \5\0\22\x002\1\0\1\2\21\2\1\x90\1b R\1 \2\5"\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x002@\2\0\22\x010\22\0"\1\0\1 \2\1\20\xf2\0\0b B\x010\5\22\4\2\5P\2\0\2\5P\2\0\2\x05'
b'0\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0R\20\x012\0"\5\22 2\5"\0b B \x052\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0\2\xd0\1%\22 2\5"\0b 2 \5\22\24\2\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\x040\1\0\x010\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002\x80\1!\x92\x015\22\x102\5"\0b "02\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002`\1\22\21\xe5\1\2 "\5"\0b "\20\1\22\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x05'
b'0\xc2\1\4\0\xa2\1\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x00202\xc0\1"E\20"\5"\0b "\20"\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\0\xa2\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x0020\2\x010\x82\1\1\0\x050\2\25\2\20R\0b \x020\2\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\2\20\2\0\xb2\1\5"\20\22 \22\5"\0b \2 \22\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\1\20\2\0\xb2\1\5\22\25\x020b\0b \2\20\22\24\2\4\2\5\4\2\4\2'
b'\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0a\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\x020Q\20b \2\20\22\24\2\4\25\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20"\4'
b'\2\4\5"\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\1\22\5\4\2\4\22\5\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2'
b' \xf2\0\0b \2\0\2\0\22%2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\2\5\a \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2'
b'\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5B\5\2\4\2\5P\2\0\2\5P\2\0\2\27 \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\21\2\20\xc2\1\x040\30\20\b\20\2\20\xc2\1\4 \30\0'
b'\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0B\0\2\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\xa0\1\2\20\xc2\1\4 \30\0\2\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\5\0\a\20\xc2\1\4\0\xa2'
b'\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5\22\1\0"\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\0\xa2\1\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0\2\20\2\0\2\0\4\2\5P\2\0\2\5P\2'
b'\27\5\0\a\20\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\0\2\x002\0\4\20\24\2\5P\2\0\2\5P\2\27\5\0\a\20\xc2\1\4\xf0\0\1\20\2\20\xc2\1\4\0a\2\0\22\1"\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x012\21\20b \2\0\2\0\22\1'
b'\4\0\4\20\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\20B\1b\4\xf0\0\2\0\2\0\2\24\2\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x025"\0b \2\0"\20\4\0\4\2\0\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\x102\1\0*2\4\20\24\0\21\0\2\0\2\0$\n\4\xf0'
b'\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\20\4\2\4\22\24\2\5P\2\0\2\5P\2\0\2\5\0\a\20\xc2\1\4 \33\0\33\22\0\2\20"\1\0\2$\5"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20"\0\4\2\4\22\24\2\5P\2\0\2\5P\2\a9\a\t"\20*'
b'B\4 \33\0\33\22\0\2\20"\0T"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\0\4\2\4\22\24\2\5P\2\0\2\5P\t\a\t\a\31\a\t\22\1\0\x0242\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1'
b'\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\22\24\2\5P\2\0\2\5P\a\20\t\20\a\0\22\0\2D\n"\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\1"\5P\2\0\2\5P\a\2\5\t\22\a\22\20d\5\22\4 '
b'\33\0\33\22\0\2\20"\0$\22\4\n\22\4\20\24\0\21\0\2\0\2\0\24\2\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\5\1\0\5P\2\0\2\5P\a*\31\a\n\2\0\2d\n\22\4 \33\0\33\22\0\2\20"\0\24 \4\n\22\4\20\4\2\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0'
b'\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\x020\5P\2\0\2\5P\a2\t\a\22\0\xf4\0\n\22\4 \33\0\33\22\0\2\20"\0\4\20\2\0\4\n\22\4\xf0\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\2\20\5\1@\2\0\2\5\1@\t2\5\2\5\2\0'
b'\4\2\0\2\0\2\0\4\n\22\4 \33\0\33\22\0\2\20"\0\24\2\0\2\0\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20\22\4\2\4\2\4\2\0\22\0\xc2\1\1 \a\5\2\31\2\5\t\2\0\4P\4\n\22\4\xa0\1\2\20"\0\4\0\4\0\4\0\n\22\4\0\xf2\0\0\2\0\4\20\n\4\xf0'
b'\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\a\t\5\2\5\2\t\5\2\0\4\2\4 \2\4\n\22\4\0\x91\1\2\20"\0\4\2\4\2\4\0\n\22\4\0a\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\t\5'
b'\t\2\5\n\t\5\2\0\24\2\4\22\4\2\n\22\4\0\xa2\1\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf2\1\a\t\5\t\25\31\5\2\0\4\20\4\20\4\0\n\22\4\0\xa2\1\20"\0T\n\22\4\20\4 \2\0\2\0\2\0$\n\4\xf0\x002'
b'@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\aI\25\t\2\0\4\20\4\20\4\0\n\22\4\xf0\0\21\0\2\20"\x004\2\0\n\22\4\20\4 \2\0\2\0\2\0\4\2\0\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\a\x197'
b'\25\2\0\xf4\0\n\22\4 \30 \21\0\2\20"\0\4\0\4 \n\22\4\20\4\0\2\0\2\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\22\1\xf5\1\a\5i\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0$\0\24\n\22\4\20\4\0\4\0\2\0\2\0\2\0\4\20\n'
b'\4\xf0\x002@\2\0\1\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\2e\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\2\4\0\2\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0\24\0\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\5\2U\2\0\4'
b'\22\4\2\4\2\4\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\4\20\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0$\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\1\0\x85\2\t%R\0\4\20\4\0\4\0\4\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\20\2\0\2\0\2\0\2\0\2\0$\n\4'
b'\xf0\x002@\2\20\xb2\1\23%\1\b\2\b\0\xf2\0\0b \2\20\22\4\2\4\2\4\2\4\0\4\x85\2\aE2\0\4\2\0D\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\x035\b\5\30\x90\1b \2\20\22\4\2\4\2\4\2$\x85\2\aE2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2'
b'\20"\x004\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\x025\22\5\0b \2\20\22\4\2\4\2\4\2$\xf9\1\27I\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\20\4\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\xf2\0\0b \2\20\22\4\2\4\2\4\2'
b'$\x85\2\aI\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\2\4\2\4\n\22\4\0a\2\0\2\0\2\24\2\4\xf0\0"\5\2\1 \2\x102E"\23%8\0%B\0b \2\20\22\4\2\4\2\4\2$\xb5\19\aU\2\25\2\0D\22\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\2\4\n\22\4\xf0\0\2\0\22\0"\4\xf0\0"% \2\20'
b'"g\25\23%8\0%B\0b \2\x102\4\2\4\22\24\xb5\1:\a\5B%\2\0D\20\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\0\4\n\22\4\20\x110\2\0R\4\xf0\0"\20\5 \2\20\22\x97\1\23%8\0%B\0b \2\0\1\2%\4\2\4\2\5\24\xb5\x012\a\t\27%)\2\0\4 \4\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0'
b'\30\0\2\0R\4P\2%\2\20\5 \2\20\22\x97\1\23%8\0\22\5B\0b \2\0\2\0\2\25\4\2\4\5\2\24\xb5\1)\'\xf5\0\2\0D\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0\30\0\2\0R\4P\2%\xba\1\x97\1\23%(EB\0b \2\0\2\0\22\25\24\5\2\5\4\xc5\1\xc9\1\2\0\4 \4\20\4\n\22\4\xa0\1\2\20"'
b'\0T\n\22\4\20\25\0\30\0\2\0R\4P\2%\b\4\xba\1\5g\23%(%\0\5B\0b \2\0\2\0\2\5\2%"\4\xb5\1\2\xc5\1\2\0\4\20\2\4\20\4\n\22\4\xa0\1\2\20"\0T\n\22\x045\4\30\0\2\0R\4P\2%(\24\x8a\1\2\1W\23\25\1(%\0\5B\0b \2\0\2\0"\25\22\5\2\4\xb9\1\1\2\xb5\1\2\0\4"\4\20\4\n\22'
b'\4 \x040\30\0\2\20"\0T"\x045\n\1\b\0\2\0R\4P\2%H\x85\1 !\27\23\1\20(%\0\5A\0b \2\0\2\0\2\0B\5\2\4\xb9\1\0Q\5\1\5\21\5\1\2\0\4 \24\0\4\n\22\4 \4\0\2\0\v\30\0\2\20"\0D\n"5*\b\0\2\0R\4P\2%\0\xd8\1@\27 \25 %\0\5Pb \2\0\2\0b\0\2\4\xc5\1\xc0\1\2\0$\2\0$\n\22'
b'\4 \4\0\2\0\v\30\0\2\20"\0D25\n\t\n\20\2\0R\4P\2\xb5\4\0\5B\0b \2\0\2\0\x82\1\4\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20"\1\20\32\x0525\b\0\b"\0R\4P\2%\xd0\3%\0\5B\0b \2\0\2\0\2\5"\0\22\0\4\x95\3\2\0\24\0$\0\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\25Z'
b'\22\0R\4P\2%@\xfa\0\5\xf2\1%\0\5B\0b \2\0\2\0\2\0\2\20\2\1\2\24\x95\3\2\0\4\20\4\20\2\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\5\n\4:\1\2\0R\4P\2% \1\2\x8a\1\5\xf2\0c%\0\5B\0b \2\0\2\0\2\1\2\20\4\0\1\24\x95\3\2\0\4\20\4\0\2\24\n\22\4 \4\0\2\0\v\30\0\2\20'
b'\xc2\1\4\5\4\b*\5\0\2\0R\4P\2% \2\xaa\1R\x83\1%\1\5B\0b \2\0\2\0\22 \4\0\2\24\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\48\32\2\0\2\0R\4P\2% \5Y\5:U\xf3\0UB\0b \2\0\2\0\2\1\0\4\0\4\0$\x99\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\27\2\30\n'
b'\31\0\2\0R\4P\2%\0\1\5\x8a\1\4( \x93\x015\0\5B\0b \2\0\2\0\2\0\24\0\4\2$\x99\3\2\0\xf4\0"\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\0\1\a\0\v\0\v\0\2\0R\4P\x025\1\0\xc8\1\3\5\xb3\1%\0\5B\0b \2\0\1\22\4\2\4\2\4\2$\x97\3\2\0d\n"\4\xa0\1\2\20\xc2\1\4\1\20\a\v\0\v\0'
b'\2\0R\4P\2eY\5(\x023\xd5\1\0\5B\0b \2\20\22\4\2\4\2\4\2$\x99\3\2\0d\n"\4\0\x91\1\2\20\xc2\1!\20\v\0\v\0\2\0"\1\22\4P\2%2U\2\30\5\27#\xa2\1%\0\x051\20b \2\20\22\4\2\4\2\x042\x97\3\2\0d\n"\4\0\xa2\1\20\xb2\1P\1\0\v\0\2\0\2\1\20\22\4P\2%\0\23\x82\x017#'
b'\xa0\1%\0\5Pb \2\20\22\4\2\4R\x97\3\2\0d2\4\0\xa2\1\20\xa2\1\x80\1\v\0\2\1\20:\4\2@\2\25#\xd7\1#\x92\1\v%\0\5;\20b \2\20\x82\1\25\x97\3\2\1\0\x024\x052\4\xa0\1\2\20\xa2\1\xe0\1*$@\2UYW\5#\x92\1\v%\0E\2\0bPR\5\xd7\3\22\1\20\32R\4\xf0\0\4\2\0\2\20\xa2\1P'
b'\1\xf0\0\32\1\2\1\n@\2\5CYG\25#\xd5\1\0\25\2\25\2\xb0\1\x0252\x175\a\25\'\5\ae\a\xf5\0\xc2\1\4\xf0\0\24\0\2\20\xa2\1`\2`"\32\1@Z\xf7\x005\1\b#\xa0\1%\0\5\x82\2\xf8\0\xea\3\xc2\1\4 \x010\24\0\2\20\xa2\1\xf0\0\1P2\1\4@Z\xf7\0\25\21\30#\xa0\1%\0\2\5\2\5\2'
b'\5"\5R\5(R\xea\3\xc2\1\4 \x010\24\0\2\20B\1"\25 \1@\x020B\v\2\1\33\21\xd5\1\1H#\x90\1\1%\20\21\v\1\v!\vQ\v\30B\x85\4\xc2\1\4 \1\0"\24\0\2\20B\0E \21@R$0$Zi\58\x023$\n\x95\1 \xeb\1\b\228\x8a\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\x000\1\xf0\0\1\22\0Q\n\2e'
b'\xa8\1C\2$\n\xc0\1\xc5\1(\2\30\4\xaa\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0@\2\x80\1\2\32Q9\1%\xc3\1\1\x134\n\xc0\x015\2E\22(\2\b\4\xca\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0P\2\xf0\0\2:A\t\n\x015\xf9\0\5#\33$\n\24\0+\20\v \5\0B%\22\25\2(\2\b\xea\4\xc2\1\4'
b' \1\0"\24\0\2\20\22\0\xf5\0\x80\1\22@\32\25\xf1\x002\xf5\0\23\1\33\a\24\n\24\2@+\20\5\0\2\25\22%\22\5\2(\2\b\4\xea\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0\20\x110\b\31\b0\24\x81\x014\x93\1\33\27\5\4\n\4\22\0\x010;\0\2\0\2\25\2\5\1\2\5\22\1\2\30\22\b\xfa\4'
b'\xc2\1\4 \1\0"\4\2\0\2\20\22\0%\30\0\23\0\a\31\a\20\b\t\n\30\xa4\2\xc7\1\4\n$\20\n\5\33\0[\2\x002\5"\5\22\30\22\30\xfa\4\xc2\1\4\xa0\1\2\20\22\0\25\2\30#\a\5\t\27\0\1H\4\3\4\5\2\5\1\t\1\xa4\1i\5\'\2$\2\20\2\nU"E\22\1%\22(R\xd5\4\xc2\1\4\0\xa2\1\20\22'
b'\20\30\27\23\5G\2\58\4\x035\1\n\5\1\x94\1\x97\1\2\32\24\2 \4\n\xa5\2\22\xf8\5\xc2\1\4\0\xa2\1\20"\0\30\27\23\x027\5\22%\32\23%1\xf4\2\20\4\20\4\n\xa0\1\x9b\a\xc2\1\4\0\x91\1 "\0\30\27\3\2\4\a\5\27\5B\32\23%1\xb2\2\n\24\2\0\24\20\4\n\xb1\1k\1K!K\21\xbb'
b'\1!K\xd1\1\xc2\1\4\xd0\1"\0\30\27\3\24\a\2\a\25\22 \32\23%\1\2\21\xb2\2\n\22\0$\20\4\n\5\2\xe5\1"E\a\25\a\x95\1\a\xd5\1\a5\a\x85\1\xc2\1\4\0\xc2\1\4\2\25\30\27\3\24\a\2\a\25\22(\32\23%\1\2\21\2%\xf2\1\n\x104\20\4\n\25BU\2\5B\25\22\x87\1\5\a%\a\25\a%\27'
b'\xf5\0\a%\27%\27\5\a\5\xc2\1\4\xd0\1\4\2\20\30\27\3\24\'\25\22(\32\23%1\0%\x80\2\2D\20\4\n5\2%\22\x85\1B\5\2\5\a\x1575\a\x85\1\a%\'\5\a5\a%\'\5\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22(\32\23%1\0%\xd0\1\2\4\nT\20\4\n\22%B\5\22G\x052\25\x175\27\x95\1\27'
b'\25\x175\xf7\0\25\'\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22 \32\23%!E\x90\1"\0\24\nT\20\4\n\22\25\22\5"\5\x127%\2\5\2\5\22\27%\27\xa5\1\a\25\27\25g\25\'\25\a\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25B\32\23%!%\2\5\xf1\0\20"\0\24\nT\20\4\n\22\25\22\5'
b'\22\5\2\5G%\2\5B\a\xf5\1\a\5\27%g\x157E\xc2\1\4\xb0\1%\1\20\30\27\3\22\'\25\22%\32\23%!%\0\5\xf2\0\20"\0\24\nT\20\4\n\2%B\5\2\5\x1757B\xb5\1W\5\x175W\x157E\xc2\1\4\xb0\1% \30\20\3\20\'\25\22(\32\20% %\0\5\xf2\0\20"\0\24\nT\20\4\nE2U\a\5G\xb5\x017\5\aE'
b'\a\x85\1\x87\x015\a\xc2\1\4\0\xa2\1%\xd0\3%\0\5\xf2\0\20"\0\24\nT\20\4\n\2e\2e\x87\x012%\'5W%\xe7\1U\xb2\1$\33\x80\1\xb5\4\0\5\xf2\0\20"\0\24\nT\20\4\n\v\20[\xa5\3\x87\4\xa2\1\4\22\4\0\v\xf0\0\v%\v( \27 \24 \27\20\30 \22\20%\0\5\xf2\0\20"\0\24\nT\20\4'
b'\n\2\5\2%\2\27%G\25\a\5\a\x057\x152EW\x85\1\a%WE\a\xd2\1\4\x80\1\v\0%\v(\21\0\27 \24 \25\21\30\21\0\22\20%\0\5\xf2\0\20"\0\24\nD\2\20\4\n\xd5\1\'%\27\x85\1"5\22\25\27\x85\1\a%\27\25\'5\a\xd2\1\4\v0;\20%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0%\0\5\xf2'
b'\0\20"\0\24\n4\2 \4\2%\22U\a\25\'%\27\x85\1\2\5\2\5B\25\'\5\a\25\27%G%\27%\27R\4b\4+ +\20%\v\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n$\x020\2\0\5\2\5\2%\'\5\x87\1\5\'%2\25\2\25\22%\aB\a\5\a5G\5\aE\a\5\a\xd2\1\4\v\20[\0\v%\v'
b'\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\24`\xb5\1\27U\a\25\27%\2%\x025\22%\a5\2eB\25\xd2\2\4\0[\20\33%\v(\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\4`5\2%\'%\a\xf5\0\27U\2\5b\5\2\27\x92\1\5\1\5B%2\25'
b'\24\xb2\1\4\33@\33\0\v%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0E\xf2\0\20"\0\24\n \33\5\v\1%\x025\a\25gE\27E\a\x85\x017\5\2e\2\xa5\1\x025\xf2\1\33@\33\20%\0(\21\3\27 \24\0\30\25\21\30\22\20\1\3\0%\2\5\xf2\0\20"\0\24\n\20\33\25\1\5\22\5\2e\a\5\a\25\x17'
b'5\'5\27%\a5\'\xa5\1\2\xa5\1\x015\xe2\1\1+\20\33\0\v\20%\1"\20\3\27 \22\0\22\27\x102 \3\0%\0\5\xf2\0\20"\0\24\n\33\1E\2\1\xf5\0\a\25\aU\a\5\'\25W\5\'\25\'U"\25\22\25B\xf5\0\xc2\1\4\1\33\20\33\0+\20\xb5\4\0\5\xf2\0\20"\0\24\n\0\5\x125\22\xa5\1\a\25\a57'
b'\x057\25G\5G5\27\25\27\5\2\25B\x85\1\xa2\1\4\33 \x8b\1% T\30\25\2\b`\23P%\0\5\xf2\0\20"\0\24\n\25\22\x052U\a\x85\1\27E\x97\x015\'\5\27\5\a\5\a\xb5\1\x125\2\5\2\25\x82\1\4\xf0\0K\x105\20\xf4\0\30\25\30@3K%\0\5\x90\1"\0\24\n\x025\2\x85\1\a%\27E\a5\x87\1U'
b'\xf7\0\x95\x0175\a%\22\5b\4;\0K\0\v\0\v\25\x005\x94\1\5\4\b\25\30\0Ck%\0\5\x90\1"\0\24\n5\2\25\a\xa5\1\'\25\xf7\0\25\27\5\'\25G\5W\x157\5\a\5\27\xc5\1\xf2\0\xe0\1\21\0\1%\4\x82\1\5\2\0\2\25\x183\25A\v%\0\5\x90\1"\0\24\2\x91\1e\x87\6\v\1\33\x81\1b\xa0\2'
b'%\4\xf5\0\22 \b\5\30#\0e\v%\0\2+\0;\20"\0\4\2\xa0\1e\x87\6\33\21\x80\1"\4\1+\0\x8b\1\25\0\25\2E\x94\x010(#\20k\0%\20\33\0\5+\5\v\0"\0\2\0\5"\25\x87\1\5\27EGE\x175\'%g\5\27U\a\x057\25\'E\22\5\2\24;\0\33\20;5\0\2\25\22\xb5\4 5\22\25P\a\2\5\22\5\27\5\x97'
b'\x015W\25\a\25\27\25\a\x157\5\x97\x015\a\25G\x057\25\a\25\22\5'
)

#image drawing code sample
draw_image(image, 0, 0, 160, palette, zoomx=1, zoomy=1, itransp=-1)
draw_image(image, 320, 0, 160, palette, zoomx=-1, zoomy=1, itransp=-1)

Rappelons que les interpréteurs Micropython 32 bits de nos calculatrices font appel à 3 types de mémoires :
  • La mémoire de stockage qui comme son nom l'indique stocke physiquement tes fichiers de scripts Python.
  • La pile (stack) qui référence, à l'exécution, les objets Python créés par tes scripts. Sa capacité limite donc le nombre total d'objets Python pouvant coexister simultanément en mémoire.
  • Le tas (heap) qui reçoit, à l'exécution, le contenu des objets Python créés. Il limite donc le volume global de données utilisées pour ces différents objets.

Voici quelques indications de consommation heap mesurées en Python 64 bits sur nos ordinateurs, via la méthode sys.getsizeof(...) :
  • pour un entier : 24 octets de base + 4 octets si non nul + 4 octets pour chaque groupe de 30 bits utilisés au-delà des premiers 31 bits dans sa représentation binaire
  • pour une liste : 56 octets de base + 8 octets par élément + les tailles de chaque élément
  • pour un tuple : 40 octets de base + 8 octets par élément + les tailles de chaque élément
  • pour une chaîne : 49 octets de base + 1 octet par caractère
  • pour un tableau d'octets (bytes) : 33 octets de base + 1 octet par octet
Ce n'est pas exactement pareil en Micropython 32 bits où nous ne disposons de plus pas de la méthode sys.getsizeof(...) pour des mesures fiables, mais le fonctionnement en reste similaire.

Dans tous les cas comme tu peux le constater le langage Python a le très gros défaut d'être un énorme consommateur de heap, mémoire qui sera bien souvent le facteur le plus limitant pour tes projets sur calculatrices. Rappelons les pires modèles sur ce critère :
  • NumWorks avec seulement 64,9 Ko de heap si ta machine est verrouillée sur le firmware officiel
  • éditions Python des TI-83 Premium CE et TI-84 Plus CE avec encore bien pire 19,7 Ko de heap
Voici maintenant les pires modèles sur le critère de l'espace de stockage utilisable pour les scripts Python :
  • éditions Python des TI-83 Premium CE et TI-84 Plus CE qui en pratique n'autorisent que 80 Ko d'espace de stockage pour les scripts Python (si on les dépasse, l'application Python refusera de se lancer, et il faudra archiver ou supprimer des scripts jusqu'à redescendre en-dessous de cette limite)
  • NumWorks avec encore bien pire 43 Ko si ta machine est verrouillée sur le firmware officiel
Des modèles qui cumulent les inconvénients.

Prenons aujourd'hui en exemple l'image ci-contre utilisant 12 couleurs différentes.

Comme déjà expliqué, img2calc a justement été conçu en priorité pour réduire la consommation en heap et stockage. Pour cela img2calc mutualise deux approches :
  • La compression de ton image au format RLE.
  • Le compactage des données, avec l'utilisation des types d'objets Python les moins gourmands en mémoire :
    • des tuples plutôt que des listes pour la palette de couleurs (utilisable comme des listes, mais au contenu non modifiable à la différence)
    • des bytes plutôt que des chaînes ou listes pour les données de la compression RLE (type d'objet Python s'utilisant comme une chaîne de caractères mais optimisé pour le stockage d'octets)
Depuis la mise à jour de janvier 2022 et selon le modèle cible choisi, img2calc pouvait te générer les couleurs de la palette sous 5 formats différents.

Le format de couleur le plus courant est le tuple (rouge, vert, bleu). C'est le seul format connu des bibliothèques graphiques :
  • ti_draw (TI-Nspire CX II)
  • ti_graphics (éditions Python des TI-83 Premium CE et TI-84 Plus CE)
  • casioplot (Casio Graph 90+E et fx-CG50)

En cibant l'un de ces modèles, voici la palette obtenue avec img2calc :
Code: Select all
palette = (
(0,0,0), (104,40,120), (136,112,80), (80,192,0), (248,132,24), (160,168,160), (248,252,0), (0,252,248), (248,0,0), (248,252,248), (248,172,176), (0,0,248)
)

C'est le pire cas niveau consommation mémoire. Les données de cette petite palette 12 couleurs de rien du tout, occupent en effet ici :
  • 158 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+40+3\times\left(8+24\right)\right)+26\times 4$mathjax$
    soit déjà 1,872 Ko à l'exécution en mémoire heap

En plus des tuples (rouge, vert, bleu) précédents, la bibliothèque graphique kandinsky des NumWorks gère 2 autres formats de couleurs :
  • chaînes hexadécimales "#RRVVBB"
  • chaînes identifiant certaines valeurs de couleurs avec leurs noms ou initiales
Puisqu'il y a ici le choix, c'est pour chaque valeur de couleur qu'img2calc opte pour le format le plus économe en mémoire :
Code: Select all
palette = (
"k", "#682878", "brown", "g", "orange", "#a0a8a0", "y", "cyan", "r", "w", "#f8acb0", "b"
)

Les données de la palette n'occupent ici plus que :
  • 100 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+49\right)+1+7+5+1+6+7+1+4+1+1+7+1$mathjax$
    soit 766 octets

Pour la HP Prime, un seul format de couleur est reconnu par la bibliothèque graphique hpprime, mais il est bien plus intéressant en terme de mémoire : l'entier 24 bits.
Code: Select all
palette = (
0, 7022972, 9269841, 5358336, 16746267, 10922151, 16776960, 65535, 16711680, 16777215, 16755894, 255
)

Ici nous avons :
  • 112 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+24\right)+11\times 4$mathjax$
    soit seulement 468 octets en mémoire heap

Le programme Micropython permettant notamment de rajouter le Python sur les anciennes TI-Nspire CX, TI-Nspire CM et TI-Nspire monochromes, inclut une bibliothèque graphique nsp gérant elle aussi un seul et unique format : l'entier 16 bits.
Code: Select all
palette = (
0, 26959, 35722, 22016, 64547, 42324, 65504, 2047, 63488, 65535, 64886, 31
)

Cela nous donne :
  • 86 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+24\right)+11\times 4$mathjax$
    soit 468 octets en mémoire heap

Enfin, traitons du cas de l'application de mathématiques intégrée KhiCAS, disponible pour les modèles couleur TI-Nspire CX II, anciennes TI-Nspire CX, NumWorks, Casio Graph 90+E et fx-CG50.

img2calc choisissait ici parmi 2 formats de couleurs :
  • tuples (rouge, vert, bleu)
  • chaînes nommant les couleurs mais avec quelques différences par rapport aux NumWorks : uniquement des noms complets (pas d'initiales), et avec un peu moins de couleurs reconnues
Code: Select all
palette = (
"black", (104,40,120), (136,112,80), "green", (248,132,24), (160,168,160), "yellow", "cyan", "red", "", (248,172,176), "blue"
)

Les données de la palette occupaient ici :
  • 156 octets en mémoire de stockage
  • $mathjax$40+12\times 8 + 5\times\left(40+3\times\left(8+24+4\right)\right)+7\times 49+5+5+6+4+3+0+4$mathjax$
    soit 1,246 Ko à l'exécution en mémoire heap

Résumons les consommations, du meilleur au pire :





tas/heap
(octets)
stockage
(octets)
nsp
468
86
hpprime
468
112
kandinsky
766
100
graphic
1246
156
ti_draw
ti_graphics
casioplot
1872
158

Une économie de mémoire fort modeste par rapport à tout ce que nous venons de survoler, les scripts générés pour KhiCAS se classant alors à l'avant-dernière place niveau consommation mémoire.

Or la bibliothèque graphique graphic de KhiCAS reconnaissait un autre format de couleur fort intéressant mais non utilisé ici, l'entier 16 bits. Un oubli fort regrettable de notre part, ne rendant ainsi pas honneur aux formidables possibilités de KhiCAS...

16353Et bien bonne nouvelle, la dernière mise à jour d'img2calc corrige cet oubli.

Les 3 formats de couleurs gérés sont désormais correctement pris en compte lorsque l'on effectue une conversion pour KhiCAS :
  • tuples (rouge, vert, bleu)
  • chaînes nommant les couleurs
  • entiers 16 bits
Seul le choix le plus économe en mémoire est retenu pour chaque couleur, et voici le résultat :
Code: Select all
palette = (
0, 26959, 35722, 22016, 64547, 42324, 65504, 2047, 63488, "", 64886, 31,
)

Les données de la palette occupent donc ici :
  • 84 octets en mémoire de stockage
  • $mathjax$40+12\times 8 + 11\times 24 + 10\times 4 + 49 + 0$mathjax$
    soit 489 octets seulement à l'exécution en mémoire heap

Résumons suite à cette mise à jour :





tas/heap
(octets)
stockage
(octets)
nsp
468
86
hpprime
468
112
graphic
489
84
kandinsky
766
100
ti_draw
ti_graphics
casioplot
1872
158

Les scripts générés pour KhiCAS se classent maintenant clairement parmi les meilleurs niveau consommation mémoire ! :bj:

Bonnes conversions à toi, et n'hésite pas à nous montrer tes projets ! ;)

Liens :

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1019 utilisateurs:
>997 invités
>15 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)